Blame


1 665c255d 2023-08-04 jrmu (define (* a b)
2 665c255d 2023-08-04 jrmu (if (= b 0)
3 665c255d 2023-08-04 jrmu 0
4 665c255d 2023-08-04 jrmu (+ a (* a (- b 1)))))
5 665c255d 2023-08-04 jrmu
6 665c255d 2023-08-04 jrmu ;; a * b = {
7 665c255d 2023-08-04 jrmu ;; 0 if b = 0,
8 665c255d 2023-08-04 jrmu ;; 2 * a * (b/2) if b is even,
9 665c255d 2023-08-04 jrmu ;; a + a * (b-1) if b is odd
10 665c255d 2023-08-04 jrmu ;; }
11 665c255d 2023-08-04 jrmu
12 665c255d 2023-08-04 jrmu (define (fast-mult a b)
13 665c255d 2023-08-04 jrmu (cond ((= b 0) 0)
14 665c255d 2023-08-04 jrmu ((even? b) (double (* a (halve b))))
15 665c255d 2023-08-04 jrmu (else (+ a (* a (- b 1))))))
16 665c255d 2023-08-04 jrmu
17 665c255d 2023-08-04 jrmu (define (test-case actual expected)
18 665c255d 2023-08-04 jrmu (load-option 'format)
19 665c255d 2023-08-04 jrmu (newline)
20 665c255d 2023-08-04 jrmu (format #t "Actual: ~A Expected: ~A" actual expected))
21 665c255d 2023-08-04 jrmu (test-case (fast-expt-iter 2 1 0) 2)