掛け算、割り算の無い世界で、足し算を使って掛け算を定義せよ
逐次平方はべき乗の高速化だったが、
これは同じような考えで掛け算を定義する。
なんとなく、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))