■
問題 1.16
(define (expr b n) (expr-iter 1 b n)) (define (expr-iter a b n) (cond ((= n 1) a) ((even? n) (expr-iter (* a (square b)) b (/ n 2))) (else (expr-iter (* a b) b (- n 1))))) (define (even? n) (= (remainder n 2) 0)) (define (square x) (* x x))
expr-iterの評価でnが偶数ならば
a = a*b^2, n = n/2
とし、nが奇数ならば
a = a*b, n = n-1
とした。結果はn=1の時のaとなる。