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
成为同义词(至少在两种参数情况下);事实并非如此。