【发布时间】:2012-01-30 09:55:10
【问题描述】:
我不明白为什么我们需要nil [1] 当cons 一个项目序列(所谓的正确列表)。在我看来,我们可以通过单独使用所谓的不正确列表(cons-ed 没有结尾 nil)来实现相同的目标。由于 Lisps [2] 已经提供了一个原始过程来区分 pair? 和原子(一些实现甚至提供 atom?),当在列表上定义过程时,例如 length,我可以做同样的事情只有点对,如下所示:
(define len
(lambda (l)
(cond ((pair? l) (+ 1 (len (cdr l))))
(else 1) ) ) )
很明显,与传统的(length '(1 2 3)) 相比,我们可以将此过程应用于'(1 . (2 . 3)) 等不正确的列表以获得预期的答案3。
我想听听为nil 的必要性辩护的任何意见。提前致谢。
[1] 让我们忽略nil/NIL、'() 和() 之间的争论。
[2] 这里指的是 Lisp 语言家族。
【问题讨论】:
-
想想如果你有一个列表会发生什么?你就会明白为什么需要
nil。
标签: lisp scheme s-expression