创建一个包含对的列表

方案中的列表只不过是在 conscdr 中相互嵌套的一系列对。正确列表的最后一个 cdr 是空列表'()

要创建列表 (1 2 3 4),我们会有这样的事情:

(cons 4 '())
> (4)
(cons 3 (cons 4 '()))
> (3 4)
(cons 2 (cons 3 (cons 4 '())))
> (2 3 4)
(cons 1 (cons 2 (cons 3 (cons 4 '()))))
> (1 2 3 4)

如你所见,scheme 中的列表是由对组成的链表。因此,将一个对象添加到列表的前面几乎没有时间,但是在列表末尾添加一个元素会强制解释器遍历整个列表。