SICP問題1.17

整数の乗算を足し算であらわすと

(define (mul a b)
  (if (= b 0)
      0
      (mul a (mul a (- b 1)))))

となる。これは線形ステップ(ようするにO(n)に比例する)。
これを
2倍するdoubleと1/2にするhalveを使って、
逐次平方であらわしてO(log(n))に比例するようにすると、

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

となる。