gpt4 book ai didi

list - 方案列表始终以相反的顺序

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

对于这里大多数更高级的计划者来说,这可能是一个微不足道的问题,但作为一个新手,我发现这是一个问题。

我需要一种方法来构建一个新列表,该列表的顺序与它进来时的顺序相同。例如,假设我们有一个列表 '(1 2 0 3 4 0 0 5)。但是遍历列表并将 cdr 作为第一个参数传回,最终会反向构建新列表。

下面是代码示例:

我将一个需要对其进行处理的“旧列表”传递给它,并将一个空列表作为“新列表”传递给它以形成并返回。

注意这里去掉0只是作为新列表必须满足的“一些条件”

  (define (form-new-list old-list new-list)
(cond ((null? old-list) new-list)
(else
(if (eq? (car old-list) 0) (form-new-list (cdr old-list) new-list)
(form-new-list (cdr old-list) (cons (car old-list) new-list))))))

;test
(form-new-list '(1 2 0 3 4 0 0 5) '()) ; gives (5 4 3 2 1)
;but want (1 2 3 4 5)

我不只是想反转通过反向过程返回的列表,而是希望首先以正确的顺序将新列表放在一起。

这是否有某种“技巧”,比如在其他地方进行递归调用?

非常感谢任何建议。

最佳答案

您正在寻找使用递归遍历列表的自然方式。使用此过程作为您的解决方案的模板 - 它只是简单地复制收到的列表:

(define (copy lst)
(if (null? lst)
'()
(cons (car lst)
(copy (cdr lst)))))

注意以下几点:

  • 当输入列表为空时递归结束,并且假设我们正在构建一个新列表,返回的正确值是空列表
  • 我们有兴趣构建一个新列表,我们通过cons输出列表的新元素来实现,在本例中,它恰好是输入列表的第一个元素(它的汽车部分)
  • 最后,递归步骤通过使用输入列表的其余部分(它的 cdr 部分)调用过程来推进

像往常一样,我通过推荐您看一下 The Little Schemer 来结束对学习如何递归思考的人的回答。或 How to Design Programs ,这两本书都会教你如何使用 Scheme 理解一般的递归过程。

关于list - 方案列表始终以相反的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243360/

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