为什么在使用列表或缺点构建时,相同的数据打印方式不同?

时间:2017-07-10 18:35:55

标签: scheme lisp mit-scheme

我尝试使用listcons的不同组合重现相同的数据布局。在MIT Scheme中,相同的数据布局似乎根据其构建方式而有所不同。

例如,

> (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))

基础数据应始终相同。麻省理工学院计划为什么表示不同?每次对的基本安排是否真的相同?

1 个答案:

答案 0 :(得分: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))

请记住:当且仅当每个cdr的{​​{1}}部分也是cons单元格或空列表时,才会定义列表。