我知道在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实现的语言)中,许多标准函数不适用于不正确的列表作为参数.