理系学生日記

おまえはいつまで学生気分なのか

問題1.17

足し算と2倍,1/2倍という演算のみの組み合わせで、O(log n)の乗算つくろう!すぐつくろう!
昨日の問題が分かっていればだいじょうぶみたいです。

(define (even? n)
  (= (remainder n 2) 0))

(define (double x) (+ x x))
(define (halve x) (/ x 2))

(define (* a b)
  (define (multiple-iter a b ans)
    (cond ((= b 0) ans)
	  ((even? b) (multiple-iter (double a) (halve b) ans))
	  (else (multiple-iter a (- b 1) (+ ans a)))))
  (multiple-iter a b 0)
)

とか調子コいてたら、なんか問題のとり方間違ったみたいで、これでは問題1.17に答えていない。
ところで問題1.18をみてみると、なんか問題1.18の回答にはなってるぽいので、まぁよかったなーとか思っているところです。