lisp方案列表

wit*_*rus -1 lisp scheme list

为什么结果(cons (list 1 2) (list 3 4))((1 2) 3 4)

我想知道为什么结果长度为3(3个元素).我的直觉让我觉得这 (list 1 2)是一个列表,(list 3 4)也是一个列表.通过使用cons过程,结果应该是两个元素,每个元素都是一个列表,但结果并不像我期望的那样.

谁能告诉我为什么?谢谢.

Ama*_*dan 7

(list a b c)等同于(cons a (list b c))定义(或者,如果你继续转换,(cons a (cons b (cons c nil))).

所以,如果你写(cons 1 (list 3 4)),这相当于(cons 1 (cons 3 (cons 4 nil)))(list 1 3 4).

现在,替换1(list 1 2),你得到:(cons (list 1 2) (cons 3 (cons 4 nil)))或者等价(list (list 1 2) 3 4)(或完全写出来(cons (cons 1 (cons 2 nil)) (cons 3 (cons 4 nil)))).

这里的关键cons是不是append,也不是list(平等地对待所有元素):在处理列表时它本质上是不对称的.左边的点保持元素("头部"); 正确的一个包含列表的其余部分("尾部").