尽管列表相同,为什么使用cons()和list()创建的列表显示不同?第一个显示由点分隔的项目,但第二个显示没有.
> (cons 1 2)
(1 . 2)
> '(1 2)
(1 2)
Run Code Online (Sandbox Code Playgroud)
我知道cons构造点缀对,但在这种情况下列表是相同的,但显示不同.
它不是同一个清单 ; 一个列表,如
(1 2)
Run Code Online (Sandbox Code Playgroud)
由引用(即第二)表达式返回的结果与结果相同
(cons 1 (cons 2 ())
Run Code Online (Sandbox Code Playgroud)
像上面这样的正确列表总是一对单链表,其最后一对具有零尾.
要扩展Basile的答案:
(1 2)
Run Code Online (Sandbox Code Playgroud)
是一个长度为2 的正确列表.也就是说,它包含两个缺点:
#1=(1 . #2#)
#2=(2 . ())
Run Code Online (Sandbox Code Playgroud)
另一方面,
(1 . 2)
Run Code Online (Sandbox Code Playgroud)
是一个长度不合适的列表.也就是说,它包含一个cons单元格:
#1=(1 . 2)
Run Code Online (Sandbox Code Playgroud)
非空的正确列表是cdr包含空列表的最后一个cons单元格的列表().非空的不正确列表是最后一个cons单元格cdr包含其他内容的列表.