問題1.17

掛け算、割り算の無い世界で、足し算を使って掛け算を定義せよ

逐次平方はべき乗の高速化だったが、
これは同じような考えで掛け算を定義する。

なんとなく、doubleとhalvはシフト演算で定義してみた。

(define (fast-mul a b)
  (cond ((= b 0) 0)
	((even? b) (double (fast-mul a (halv b))))
	(else (+ a (fast-mul a (- b 1))))))

(define (double x) (ash x 1))

(define (halv x) (ash x -1))

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