Questions tagged «lisp»

1
这是将任何递归过程转换为尾递归的通用方法吗?
看来我已经找到了将任何递归过程转换为尾递归的通用方法: 使用额外的“结果”参数定义帮助程序子过程。 将应用于过程的返回值的参数应用于该参数。 调用此帮助程序过程即可开始。“结果”参数的初始值是递归过程的退出点的值,因此,最终的迭代过程将从递归过程开始收缩的地方开始。 例如,这是要转换的原始递归过程(SICP练习1.17): (define (fast-multiply a b) (define (double num) (* num 2)) (define (half num) (/ num 2)) (cond ((= b 0) 0) ((even? b) (double (fast-multiply a (half b)))) (else (+ (fast-multiply a (- b 1)) a)))) 这是转换后的尾递归过程(SICP练习1.18): (define (fast-multiply a b) (define (double n) (* …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.