1.18¶
; Using the results of Exercise 1.16 and Exercise 1.17, ; devise a procedure that generates an iterative process ; for multiplying two integers in terms of adding, doubling, ; and halving and uses a logarithmic number of steps (define (fast-mul a b) (define (even? x) (= (remainder x 2) 0)) (define (double x) (+ x x)) (define (halve x) (/ x 2)) (define (fast-mul-iter a counter sum) (cond ((= counter 0) sum) ((even? counter) (fast-mul-iter (double a) (halve counter) sum)) (else (fast-mul-iter a (- counter 1) (+ a sum))) ) ) (fast-mul-iter a b 0) ) (fast-mul 2 6) ;Value: 12 (fast-mul 24 67) ;Value: 1608 (fast-mul 1 7) ;Value: 7