我正试图弄清楚如何使用递归在Scheme中以相反的顺序(返回前面)处理列表。我的研究表明,你可以在列表中使用反向功能,但我不想走那条路。
我知道以下内容会返回列表中的最后一个元素;
(caddr '(1 5 3))
returns 3
我希望能够通过该功能发送剩余的1 5,再次查看最后一个元素并重复直到列表用尽
从左到右很简单,你看看列表中的车并发回cdr。
答案 0 :(得分:2)
首先进行递归调用,然后处理car
。例如:
(define (process-in-reverse lst fun)
(when (not (null? lst))
(process-in-reverse (cdr lst) fun)
(fun (car lst))))
然后
> (process-in-reverse '(1 5 3) display)
351
如果您只想反转结果,并且后续调用独立于先前的调用,则累加器将执行并且是尾递归的:
(define (process-reverse-result lst fun)
(let loop ((lst lst) (res null))
(if (null? lst)
res
(loop (cdr lst)
(cons (fun (car lst)) res)))))
然后
> (process-reverse-result '(1 5 3) add1)
'(4 6 2)