2.79 Exercise 2.79
TODO: Explain and verify
(define (install-equ?-predicate) (define (equ?-scheme-number x y) (= x y)) (define (equ?-rational x y) (and (= (numer x) (numer y)) (= (denom x) (denom y)))) (define (equ?-complex z1 z2) (and (= (real-part z1) (real-part z2)) (= (imag-part z1) (imag-part z2)))) (put 'equ? '(scheme-number scheme-number) (lambda (x y) (attach-tag 'scheme-number (equ?-scheme-number x y)))) (put 'equ? '(rational rational) (lambda (x y) (attach-tag 'rational (equ?-rational x y)))) (put 'equ? '(complex complex) (lambda (z1 z2) (attach-tag 'complex (equ?-complex z1 z2))))) (define (equ? x y) (apply-generic 'equ? x y))