我想问问是否有人想通过给出两个列表的和的迭代方案代码来帮助我。我已经有了代码的递归版本。
(define (sum-lists l1 l2)(cond ((and (null? l1) (null? l2)) '())
((null? l1) l2)
((null? l2) l1)
(else (cons (+ (car l1) (car l2)) (sum-lists (cdr l1) (cdr l2))))))
答案 0 :(得分:0)
一般的“迭代过程”配方:
通常在转换列表时将结果反向累积,然后在完成后反转结果。
一个简单的示例,将每个列表元素加1:
(define (add-1 ls)
(if (null? ls)
'()
(cons (+ 1 (car ls)) (add-1 (cdr ls)))))
要进行迭代,请创建一个辅助函数,在该函数中您cons
而不是递归结果到累加器:
(define (add-one ls acc)
(if (null? ls)
(reverse acc)
(add-one (cdr ls) (cons (+ 1 (car ls)) acc))))
(请注意,除了引入acc
之外,递归包含与以前相同的部分,但顺序不同。)
然后用一个空的累加器开始它:
(define (add-1 ls)
(add-one ls '()))
您的案例涉及的基础案例略多,因为您需要适应不同长度的输入。
完成它作为练习。
(另一项练习:弄清为什么不需要您的第一个条件(and (null? l1) (null? l2))
。)