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