Practice 2.83
make number
make an integer
(define (make-int number) (list 'int number))
make a rational number
(define (make-rational numberator denominator) (list 'rational numberator denominator))
make a real number
(define (make-real real) (list 'real real))
make a complex number
(define (make-complex real imag) (list 'complex real imag))
coercion
int to rational
(define (int->rational integer) (make-rational integer 1))
rational to real
(define (rational->real rational) (make-real (/ (cadr rational) (caddr rational))))
real to complex
(define (real->complex real) (make-complex real 0))
raise
(define (raise x) (apply-generic 'raise x))
(put 'raise 'int int->rational)
(put 'raise 'rational rational->real)
(put 'raise 'real real->complex)