2015/10/06
SICP 問題1.17
(define (* a b)
(if (= b 0)
0
(+ a (* a (- b 1)))))
;; 末尾再帰にしてみた
(define (* a b)
(*iter a b 0))
(define (*iter a b sum)
(if (= b 0)
sum
(*iter a (- b 1) (+ a sum))))
(define (double n)
(* 2 n))
(define (halve n)
(/ n 2))
;; fast-exptのように
(define (fast-* n m)
(cond ((= m 0) 0)
((even? m) (double (fast-* n (halve m))))
(else (+ n (fast-* n (- m 1))))))