0
我想构建一个尾递归过程出我已经构建的另一个过程。但我并没有完全意识到我应该如何思考。我给你两个例子,其中第一个是我的程序,它不是尾递归,第二个是我的“尝试”做一个尾递归过程。是啊...尝试:)我会很高兴的如何构建尾递归程序的任何建议,我应该如何开始,思考和什么。递归过程到尾递归过程
编辑:第一个完全按照我想要的。 (define square (lambda (x) (* x x)))
(do-to-each square '(1 2 3))
应方每一个数字,这是榜上无名(1 4 9)
(define do-to-each
(lambda (proc lst)
(if (list-empty? lst)
(list-create)
(list-insert (proc (list-first lst)) (do-to-each proc (list-rest lst))))))
(define do-to-each-tail
(lambda (proc lst)
(define loop
(lambda (n result)
(if (= n 1)
(list result)
(if (eq? (length result) 1)
(car result)
(loop (- n 1) (cons (car result) (do-to-each-tail proc (cdr result))))))))
(loop (length lst) lst)))
相关:http://stackoverflow.com/q/27386520/124319 – coredump
啊谢谢,要去看看那个。 :) – Joel
从列表的尾部开始工作的最简单方法是,结果反过来,然后在基本情况下将结果返回时,再简单地反转结果。 – leppie