λ J*_*kas 12 lisp linked-list common-lisp
Common Lisp Cons Cell的定义究竟是什么?Cons Cell如何与标准链表项不同?毕竟,cons单元格和链接列表项都有一个值和指向下一个单元格或项目的指针......或者这种理解是错误的吗?
Zed*_*Zed 20
缺点单元格通常包含两个指向任何东西的指针.一般用法当然是指左边的一个"值",另一个指向另一个具有"右"的Cons单元格(或nil).
Jim*_*wis 14
cons单元比链表节点更靠近二叉树节点.汽车和cdr返回两个孩子,可以是零,原子或其他利弊细胞.
在Lisp中,cons单元格拥有一对值.如果cons单元格在变量中c
,则(car c)
返回第一个值并(cdr c)
返回第二个值.
按照惯例,列表由cons单元组成,其中car
单元格包含节点值,并且cdr
包含对下一个节点的引用或nil(空列表)以指示列表的结尾.当基元函数返回或接受列表时,这是显示列表的格式.
因此,对于列表l
,(car l)
给出第一个元素(第一个cons单元格中的值)并(cdr l)
返回列表的尾部(列表中的下一个cons单元格).
甲cons
细胞是由以下组成的合同的三分之一cons
,car
以及cdr
,与所述的要求是它们表现为对,如其他人提及.
从该定义中省略"引用","指针"等词语的原因是要认识到那些是实现细节.如果你愿意的话,你可以cons
凭借Abelson和Sussman所做的那样凭空捏造:
(define (cons a b) (lambda (x) (x a b)))
(define (car x) (x (lambda (a b) a)))
(define (cdr x) (x (lambda (a b) b)))
Run Code Online (Sandbox Code Playgroud)
这个定义完全存在于Lisp的定义和函数世界中,甚至不停止考虑对象是存储为值还是引用; 然而,这些可以作为原始对象的替代品(不考虑可变性或其他特殊用途).