Scheme中最后一个元素指向Scheme的内容是什么?

时间:2009-06-04 16:14:28

标签: scheme

当我在Scheme中列出一个列表时,最后一对的cdr指向什么?这是一个“空话”还是“空名单”? DrScheme并不介意(cons 'a empty)(cons 'a '())。最后空字和空列表有什么区别?

3 个答案:

答案 0 :(得分:4)

DrScheme不介意你cons,因为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 :(得分:1)

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

答案 2 :(得分:1)

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

(cdr (list 1 2 3))
(cdr (cdr (list 1 2 3)))
(cdr (cdr (cdr (list 1 2 3))))