SICP Practice

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)