lisp 里的基本的数据结构 list
而我们常说 list 就是有cons cell 连接起来的
那么cons 与list 到底是什么区别呢?
list 是 列表, list 的结尾是以 nil 结尾的。
cons 是 结尾不是 nil 的列表
cons 因为结尾不是nil ,所以很多系统自带的功能函数是不能对cons 进行计算的。
所以cons 在整个开发上是很少使用的。但是没有cons 是远远不行的。
例如:
CL-USER> (cons 1 (cons 2 (cons 3 nil)))
(1 2 3)
CL-USER> (cons 1 (cons 2 3))
(1 2 . 3)
CL-USER> (length (cons 1 (cons 2 (cons 3 nil))))
3
CL-USER> (length (cons 1 (cons 2 3)))
; Evaluation aborted on #
.
CL-USER>
length 函数是无法对congs 统计长度的。
但是可以对list 统计长度。
例如:
CL-USER> (equal '(1 2 3) (cons 1 (cons 2 (cons 3 nil))))
T
CL-USER> (equal '(1 2 3) (cons 1 (cons 2 3)))
NIL
CL-USER>
到这里,应该就很明白了。
CL-USER> (setf x (cons 2 3)) 点对 cons
(2 . 3)
CL-USER> x
(2 . 3)
CL-USER> (car x)
2
CL-USER> (cdr x)
3
CL-USER> (setf y '(2 3)) 列表
(2 3)
CL-USER> (car y )
2
CL-USER> (cdr y)
(3)
CL-USER>
对比看看 cdr 的求值是不同的list 的cdr 求的是 列表
cons 的cdr 求值是值 。
cons 在编程上用的比较多的应该是点对
(2 . 3)
可以很便利的标识某种数据结构。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/133735/viewspace-751819/
,如需转载,请注明出处,否则将追究法律责任。