我尝试使用list
和cons
的不同组合重现相同的数据布局。在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))
基础数据应始终相同。麻省理工学院计划为什么表示不同?每次对的基本安排是否真的相同?
答案 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
单元格或空列表时,才会定义列表。