-1

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

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

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

4

1 回答 1

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))), 或 to (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))))。

这里的关键是consis not append, nor list(平等对待所有元素):在处理列表时,它本质上是不对称的。左边的点持有元素(“头”);右边的持有列表的其余部分(“尾巴”)。

于 2013-01-29T02:02:13.587 回答