(define (install-shceme-number-package2)
(put 'add '(scheme-number scheme-number)
(lambda (x y) (+ x y)))
(put 'sub '(scheme-number scheme-number)
(lambda (x y) (- x y)))
(put 'mul '(scheme-number scheme-number)
(lambda (x y) (* x y)))
(put 'div '(scheme-number scheme-number)
(lambda (x y) (/ x y)))
(put 'make 'scheme-number
(lambda (x) (tag x)))
'done)
(define (add x y) (apply-generic 'add x y))
(define (mul x y) (apply-generic 'mul x y))
(define (sub x y) (apply-generic 'sub x y))
(define (div x y) (apply-generic 'div x y))
(add 1 2)
(mul 1 2)
(sub 2 3)
(div 2 3)
(install-rational-packeage)
(define rat1 ((get 'make 'rational) 1 2))
(define rat2 ((get 'make 'rational) 4 5))
(add rat1 rat2)
(mul rat1 rat2)