1:点对的概念
理解列表的话,先清楚所谓的点对单元如下图,其中a,b可以为任何对象。Cons 接受两个实参并且返回他们两个组成的点对单元。CAR是该列表的第一个元素,CDR则包含着其余元素。既然a,b可以为任何对象,如果串过去的是两个整数实参也就是如下(1.2)的点对形式,
但是这样的结构不能够再继续扩展。所以我们就引入了Lisp中的列表规则:后面的位置我们不直接存字面值了,改为地址,比如下一个点对的引用,所以当CDR为后续点对的链接或NIL时,Lisp打印器可以理解这种约定并能将这种链状的点对单元打印成括号列表而不用用点分隔的点对。
CL-USER> (cons 1 2)
(1 . 2)
2:Lisp 中约定的列表形式
(1 2 3)这个列表实际上就是3个点对单元链接组成,具体结构如下:
列表时通过将点对以链状连接在一起而构成的。如上图所示列表的元素被保存在点对的CAR中,对后续点对的链接则被保存在CDR中,链上最后一个单元的CDR为NIL。
代码实现如下,正好符合lisp