为什么使用cons()和list()创建的列表的显示方式不同?

bar*_*kin 0 lisp list

尽管列表相同,为什么使用cons()和list()创建的列表显示不同?第一个显示由点分隔的项目,但第二个显示没有.

> (cons 1 2)
(1 . 2)

> '(1 2)
(1 2)
Run Code Online (Sandbox Code Playgroud)

我知道cons构造点缀对,但在这种情况下列表是相同的,但显示不同.

Bas*_*tch 8

不是同一个清单 ; 一个列表,如

  (1 2)
Run Code Online (Sandbox Code Playgroud)

由引用(即第二)表达式返回的结果与结果相同

 (cons 1 (cons 2 ())
Run Code Online (Sandbox Code Playgroud)

像上面这样的正确列表总是一对单链表,其最后一对具有零尾.


Chr*_*ung 5

要扩展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包含其他内容的列表.