ITPub博客

首页 > Linux操作系统 > Linux操作系统 > cons vs list

cons vs list

原创 Linux操作系统 作者:babyyellow 时间:2012-12-28 15:37:26 0 删除 编辑
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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
oracle MySQL Postgresql 专职数据库dba。 系统架构师。 mysql 官方认知dba 。 15年专职dba 经验。 潜意识沟通实证者 心理咨询师。 禅修布道者, 禅修指导员。 禅定实证者。

注册时间:2010-12-02

  • 博文量
    367
  • 访问量
    1908856