LISP Scheme

このエントリーをはてなブックマークに追加
219デフォルトの名無しさん
累積変数ってのは、末尾再帰に直すときに使われる技法だな。
(define (sum xs)
(if (null? xs) 0 (+ (car xs) (sum (cdr xs)))))
って素直だけど stackを消費する再帰を
(define (sum xs)
(define (isum xs r)
(if (null? xs) r (isum (cdr xs) (+ r (car xs)))))
(isum xs 0))
って、rって変数を使って末尾再帰に直す事。
っていうか、変数r そのものが累積変数。だと思われ。