我不明白为什么我们需要nil
[1] 来处理cons
项目的序列(所谓的正确列表)。在我看来,我们可以通过单独使用所谓的不正确列表(cons
没有结尾的 -ed 对nil
)来实现相同的目标。由于 Lisps [2] 已经提供了一个原始过程来区分 apair?
和原子(一些实现甚至提供atom?
),当在列表上定义过程时,例如,length
我可以只用点对做同样的事情,如下所示:
(define len
(lambda (l)
(cond ((pair? l) (+ 1 (len (cdr l))))
(else 1) ) ) )
很明显,我们可以将这个过程应用到一个不合适的列表上,比如'(1 . (2 . 3))
得到预期的答案3
,这与传统的不同(length '(1 2 3))
。
我想听听任何为nil
. 提前致谢。
nil
[1] 让我们忽略/NIL
和之间'()
的争论()
。
[2] 这里指的是 Lisp 语言家族。