car
和
cdr
回来
nil
如果给定
无
作为论据。让我们先入为主
无
等一下,看看你有什么价值观
事实上
看着。
(car '()) == '()
(cdr '()) => nil
汽车
和
cdr
得到一个空列表,所以我们返回
无
或
()
.
(car '(nil . nil)) => nil
(cdr '(nil . nil)) => nil
现在
(nil . nil)
是
(() . ())
。也就是说,这是一个cons cell,它的car和cdr都是
无
.
当我们有
. ()
在cons单元格的末尾,我们可以通过省略尾部来用符号缩短它
无
。这只是一个符号上的方便,所以通过我们的符号
(() .())
可以写成
(())
或
(nil)
。请注意,确实如此
不
更改值。最明确的写作方式仍然是
(() .())
,但为了可读性,我们也可以将其写得更短。
如果一个空列表是cons单元格的两个“元素”都为零的列表,为什么它们不相同?
这是不对的。空列表是
不
一个囚犯牢房。空列表就是原子
无
。这是一个象征,就像
'foo
或
'pizza
或
'common-lisp
。这只是我们选择用于此目的的一个符号。但是
无
不
有
汽车或cdr电池。碰巧的是,让
(car nil)
和
(cdr nil)
是
无
作为算法的角落案例,因此
功能
汽车
和
cdr
在上有特殊行为
无
但是
无
是
不
一个囚犯牢房。
> (consp nil)
nil
> (consp '())
nil
> (consp '(1 . 2))
T
根据
system class
LIST
这个
list
类型可以描述为
类型
cons
和
null
形成类型列表的详尽分区。
所以
列表
在Common Lisp中,它被定义为“cons单元格或特殊值
无
”。值得注意的是,
无
本身并不是一个cons细胞。