在Lisp中没有nil的列表

Sta*_*lin 7 lisp null list

我知道在Lisp中列表必须以nil结尾,但表达式如此

(print (cons 1 (cons 3 2)))
Run Code Online (Sandbox Code Playgroud)

不会抛出任何错误.它打印:

(1 3 . 2)
Run Code Online (Sandbox Code Playgroud)

这是对的吗?

我正在使用GNU Clisp.

Pil*_*lsy 11

在Lisp中,正确的列表以NIL,但您也有不正确的列表.一种不正确的列表是最后一个cons单元具有除NIL其之外的原子的列表CDR.(1 3 . 2)正是这样一个不合适的清单.

你甚至可以拥有不合适的列表,它根本没有最后一个单元格.CARs和CDRs基本上只是指针,所以你可以有圆形列表!

在Common Lisp(这是CLISP实现的语言)中,许多标准函数不适用于不正确的列表作为参数.


Chr*_*sen 9

你所拥有的是一个虚线列表,这是一种不正确的列表.

最后一个CDR为NIL的CONS细胞链是一个合适的列表.