gpt4 book ai didi

list - 像这样 append 两个列表会返回一个列表而不是两个列表的 cons 单元格是什么?

转载 作者:行者123 更新时间:2023-12-04 08:12:54 24 4
gpt4 key购买 nike

append 两个列表的一种常见且简单的方法如下:

(define (append a b)
(if (null? a)
b
(cons (car a) (append (cdr a) b))))
为什么这行得通?当我们到达 a 的最后一个元素时,我明显不正确的信念是我们将调用 (cons [the original list a, built out of many calls to (cons (car a) ...)] [the original list b]) .简而言之,我看不出为什么函数不返回 (cons a b) ,这将是 cons包含两个列表的单元格。即使我对 a 的看法是错误的部分,为什么加 b有效将我们的输出作为一个整体列表,而不首先将其分解为各个元素?
我怀疑一个可行的例子对答案有很大的值(value)。

最佳答案

a 无处可寻同意b .相反,a 的元素被骗到 b ,从 a 的最后一个元素开始.考虑:

(append '() '(1 2 3))
--> '(1 2 3) ; there are no elements in `a` to cons onto `b`

(append '(y) '(1 2 3))
--> (cons (car '(y)) (append (cdr '(y)) '(1 2 3)))
--> (cons 'y (append '() '(1 2 3)))
--> (cons 'y '(1 2 3)) ; the last element of `a` is consed onto `b`
--> '(y 1 2 3)

(append '(x y) '(1 2 3))
--> (cons (car '(x y)) (append (cdr '(x y)) '(1 2 3)))
--> (cons 'x (append '(y) '(1 2 3)))
--> (cons 'x (cons (car '(y)) (append (cdr '(y)) '(1 2 3))))
--> (cons 'x (cons 'y (append '() '(1 2 3))))
--> (cons 'x (cons 'y '(1 2 3))) ; the last element of `a` is consed onto `b`
--> (cons 'x '(y 1 2 3)) ; then the next-to-last element of `a`, and so on
--> '(x y 1 2 3)

关于list - 像这样 append 两个列表会返回一个列表而不是两个列表的 cons 单元格是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65863920/

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