Code Review

Compare your solutions

    #| BEGIN (Write your solution here) |#
; My code
(define (equ? num1 num2)
    (let ((tag1 (type-tag num1)) (tag2 (type-tag num2)) (contents1 (contents num1)) (contents2 (contents num2)))
        (if (eq? tag1 tag2)
            ((get 'equ? (list tag1 tag2)) contents1 contents2)
            #f
        )
    )
)
(define (update-scheme-number-package)
    (put 'equ? '(scheme-number scheme-number) (lambda (num1 num2) (= num1 num2)))
)
(define (update-rational-package)
    (define (numer x) (car x))
    (define (denom x) (cdr x))
    (put 'equ? '(rational rational)
        (lambda (num1 num2)
            (and
                (= (numer num1) (numer num2))
                (= (denom num1) (denom num2))
            )
        )
    )
)
(define (update-complex-package)
    (put 'equ? '(complex complex)
        (lambda (num1 num2)
            (and
                (= (real-part num1) (real-part num2))
                (= (imag-part num1) (imag-part num2))
            )
        )
    )
)
#| END |#