Scheme 使用列表或cons构建时,为什么相同的数据打印方式不同?
我试图通过使用Scheme 使用列表或cons构建时,为什么相同的数据打印方式不同?,scheme,lisp,mit-scheme,Scheme,Lisp,Mit Scheme,我试图通过使用list和cons的不同组合来重现相同的数据布局。在麻省理工学院的方案中,相同的数据布局似乎打印方式不同,这取决于它是如何构建的 例如 > (cons 1 (cons 2 3)) (1 2 . 3) > (list 1 (cons 2 3)) (1 (2 . 3)) > (cons 1 (list 2 3)) (1 2 3) > (list 1 (list 2 3)) (1 (2 3)) 基础数据应始终相同。为什么麻省理工学院的计划以不同的方式表达它?对的
list
和cons
的不同组合来重现相同的数据布局。在麻省理工学院的方案中,相同的数据布局似乎打印方式不同,这取决于它是如何构建的
例如
> (cons 1 (cons 2 3))
(1 2 . 3)
> (list 1 (cons 2 3))
(1 (2 . 3))
> (cons 1 (list 2 3))
(1 2 3)
> (list 1 (list 2 3))
(1 (2 3))
基础数据应始终相同。为什么麻省理工学院的计划以不同的方式表达它?对的基本排列是否每次都相同?每个输入构建不同的输出,因此它们的打印方式不同。请注意,以下表达式是等效的:
(cons 1 (cons 2 3))
; (1 2 . 3)
(list 1 (cons 2 3))
(cons 1 (cons (cons 2 3) '()))
; (1 (2 . 3))
(cons 1 (list 2 3))
(cons 1 (cons 2 (cons 3 '())))
; (1 2 3)
(list 1 (list 2 3))
(cons 1 (cons (cons 2 (cons 3 '())) '()))
; (1 (2 3))
请记住:当且仅当每个
cons
单元的cdr
部分也是cons
单元或空列表时,才定义列表。(列表1 2 3)
等同于(cons 1(cons 2(cons 3’())
。对象不同,请尝试等同于。您可能会发现该页面很有用。如果(cons 1(cons 2 3))
返回与(list 1(list 2 3))
相同的内容,则会使cons
和list
成为同义词(至少在两种参数情况下);事实并非如此。