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 (define (double x)
17 665c255d 2023-08-04 jrmu (+ x x))
18 665c255d 2023-08-04 jrmu (define (halve x)
19 665c255d 2023-08-04 jrmu (/ x 2))
20 665c255d 2023-08-04 jrmu
21 665c255d 2023-08-04 jrmu (define (test-case actual expected)
22 665c255d 2023-08-04 jrmu (load-option 'format)
23 665c255d 2023-08-04 jrmu (newline)
24 665c255d 2023-08-04 jrmu (format #t "Actual: ~A Expected: ~A" actual expected))
25 665c255d 2023-08-04 jrmu (test-case (fast-mult 0 0) 0)
26 665c255d 2023-08-04 jrmu (test-case (fast-mult 0 1) 0)
27 665c255d 2023-08-04 jrmu (test-case (fast-mult 0 8) 0)
28 665c255d 2023-08-04 jrmu (test-case (fast-mult 5 0) 0)
29 665c255d 2023-08-04 jrmu (test-case (fast-mult 2 1) 2)
30 665c255d 2023-08-04 jrmu (test-case (fast-mult 3 3) 9)
31 665c255d 2023-08-04 jrmu (test-case (fast-mult 5 4) 20)
32 665c255d 2023-08-04 jrmu (test-case (fast-mult 12 13) 156)
33 665c255d 2023-08-04 jrmu (test-case (fast-mult 12 24) 288)
34 665c255d 2023-08-04 jrmu