2009-06-04 147 views

回答

4

DrScheme不介意你cons -ing,因为cons可以做的不仅仅是建立名单。从参考,

(cons a d) → pair? 
    a : any/c 
    d : any/c

这意味着cons建立配对。这也是完全合法的做

> (cons 1 2) 
(1 . 2) 

这不是一个名单,但仍然可以让你做

> (car (cons 1 2)) 
1 
> (cdr (cons 1 2)) 
2 

但不管怎么说,“空字”和“空列表”是同一个对象,可以通过检查

> (eq? empty '()) 
#t 
1

最后一对的cdr指向'(),空列表。

+0

为什么(缺点是空的)工作? – unj2 2009-06-04 16:37:04

+1

所有列表均由一系列列表组成,每个列表的长度均为2.例如,(1 2 3)实际上是长度为2的列表:第一个项目为1,第二个项目为(2 3)。内部列表也是长度为2的列表:第一个项目是2,第二个项目是(3)。第二个项目实际上也是两个项目列表:第一个项目是3,第二个项目是()。因此,cons('a'())返回('a),因为那实际上是('a。'())。 – 2009-06-04 16:45:26

1

如果您评估符号empty,可以找到您所有问题的答案。它被定义为等于'(),空列表,这是最后一个cdr指向的内容。要说服自己,试试这个:

(cdr (list 1 2 3)) 
(cdr (cdr (list 1 2 3))) 
(cdr (cdr (cdr (list 1 2 3)))) 
相关问题