■
久々に問題を解こう。
数日空けると頭が再帰的じゃなくなって問題が意味不明に。。
(define (* a b) (define (*-iter x a b) (cond ((= b 0) x) ((even? b) (*-iter (if (= x 0) (double a) (double x)) a (halve b))) (else (*-iter (+ x a) a (- b 1))))) (define (even? n) (= (remainder n 2) 0)) (define (double n) (* n 2)) (define (halve n) (/ n 2)) (*-iter 0 a b))
xの初期値を0にするとbが偶数の時に (double x)とやると
0になってしまうので(if (= x 0) (double a) (double x))
としたけど微妙だ。。