gpt4 book ai didi

list - 方案对构建

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:25 26 4
gpt4 key购买 nike

我正在尝试理解对的构造和表示。让我们来看看以下结果:

(length (cons '(a b) '(d e f)))
=> 4

现在让我们调换顺序:

(length (cons '(d e f) '(a b)))
=> 3

但是

(length (car (cons '(d e f) '(a b))))
=> 3

您能解释一下上面的结果吗?car和cdr有什么区别?

最佳答案

请记住,cons 只是将两件事结合在一起,由于历史原因,第一个被称为 car,第二个被称为 cdr .

如果第二个恰好是一个适当的列表,那么结果也是一个列表。因此,列表被定义为 consing 一个元素的结果和 consing 一个元素的结果......等等,直到我们到达空列表 '()。例如:

(cons 1 (cons 2 (cons 3 '())))
=> '(1 2 3)

处理列表时,将 car 视为列表的第一个元素,将 cdr 视为其余元素,将 cons在列表的头部再添加一个元素 - 该元素可以是任何东西,包括另一个列表。它只是被添加到头部,列表没有“合并”(为此我们使用 append)。看一看:

(car '(1 2 3))
=> 1

(cdr '(1 2 3))
=> '(2 3)

现在,关于您的示例 - 第一个添加 '(a b) 作为列表的第一个元素,其余的是 '(d e f),所以我们现在有一个 4 元素列表,如下所示:

(cons '(a b) '(d e f))
=> '((a b) d e f)

与第二个示例类似:我们将第一个元素 '(d e f) 添加到其余元素 '(a b),我们得到一个 3 元素列表:

(cons '(d e f) '(a b))
=> '((d e f) a b)

最后,如果我们在上面的列表中调用 car,我们会得到它的第一个元素——恰好是 '(d e f),显然它有 3 个元素:

(car (cons '(d e f) '(a b)))
=> '(d e f)

关于list - 方案对构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com