Hatena::Groupcsnagoya-sicp

gabuchanの日記

2008-11-10

問題1.16

| 15:55

fast-exptを反復的プロセスな手続きにしてみた。

(define (fast-expt b n)
  (define (square x) (* x x))
  (define (fast-expt-iter b n a)
    (cond [(= n 0) a]
          [(even? n) (fast-expt-iter (square b) (/ n 2) a)]
          [else (fast-expt-iter b (- n 1) (* a b))]))
  (fast-expt-iter b n 1))

Gaucheは組み込みで even? が使えるっぽい。