ウォンツテック

そでやまのーと

問題 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となる。