对于这里的大多数更高级的计划者来说,这可能是一个微不足道的问题,但作为一个新手,我发现这是一个问题。
我需要一种方法来构建一个新列表,它的顺序与它进入时的顺序相同。例如,假设我们得到了一个列表'(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)
我不只是想反转使用反向过程返回的列表,而是希望首先以正确的顺序将新列表放在一起。
这是否有某种“技巧”,比如在其他地方进行递归调用?
任何意见是极大的赞赏。