]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex2_79.rkt
solutions to 4.38, 4.39 and 4.40
[sicp.git] / src / sicp / ex2_79.rkt
1 #lang racket
2
3 (define (equ? x y) (apply-generic 'equ? x y))
4
5 (define (install-scheme-number-package)
6   (define (equ? x y)
7     (= x y))
8   (put 'equ? '(scheme-number scheme-number) equ?)
9   'done)
10
11 (define (install-rational-number-package)
12   (define (equ? r1 r2)
13     (let* ([n1 (numer r1)]
14            [d1 (denom r1)]
15            [n2 (numer r2)]
16            [d2 (denom r2)]
17            [g1 (gcd n1 d1)]
18            [g2 (gcd n2 d2)])
19       (and (= (/ n1 g1) (/ n2 g2))
20            (= (/ d1 g1) (/ d2 g2)))))
21   (put 'equ? '(rational rational) equ?)
22   'done)
23
24 (define (install-complex-number-package)
25   (define (equ? z1 z2)
26     (and (= (real-part z1) (real-part z2))
27          (= (imag-part z1) (imag-part z2))))
28   (put 'equ? '(complex complex) equ?)
29   'done)
30