为什么使用cons创建一对两个列表会产生一个列表和两个元素?

fin*_*11b 5 lisp scheme racket

我开始学习Scheme,主要是为了好玩,因为我之前从未使用过函数式语言.我之所以选择Scheme,是因为我想长时间阅读SICP.

无论如何,我目前正在学习列表,在此之前我了解了cons,car和cdr.还有一个例子可以创建一个带有缺点的列表列表,如下所示:

(cons (list 1 2) (list 3 4))
Run Code Online (Sandbox Code Playgroud)

结果列表是((1 2)3 4),这对我没有意义,我希望((1 2)(3 4))是结果(由两个列表组成的列表).为什么它表现得那样?我意识到,如果我要使用汽车,我会得到(1 2),而cdr我会得到(3 4)因为cdr总是返回"其余的",但我不明白为什么列表没有制作两个名单?

sep*_*p2k 9

你得到一个列表(1 2)作为第一个元素(汽车)和(3 4)其余(cdr),因为cons的第一个参数是列表的第一个元素,第二个参数是包含其余项目的列表.

这非常类似于列表的结构:(正确)列表的每个节点包含一个元素和一个包含所有其他元素的列表.cons创建一个这样的节点.

如果第二个参数cons将成为列表的第二个元素,您将如何创建具有三个参数的列表?你必须cons在这一点上制作变奏曲,它只是另一个名字list.

如果要创建列表使用(list (list 1 2) (list 3 4)).