Blob


1 (define *op-table* (make-has-table 'equal))
2 (define (put op type proc)
3 (hash-table-put! *op-table* (list op type) proc))
4 (define (get op type)
5 (hash-table-get *op-table* (list op type) '()))
7 (define (install-deriv-package)
8 (define (make-sum a1 a2) (list '+ a1 a2))
9 (define (addend s) (car s))
10 (define (augend s) (cadr s))
11 (define (make-product m1 m2) (list '* m1 m2))
12 (define (multiplier p) (car p))
13 (define (multiplicand p) (cadr p))
14 (define (deriv-sum exp var)
15 (make-sum (deriv (addend exp) var)
16 (deriv (augend exp) var)))
17 (define (deriv-product exp var)
18 (make-sum
19 (make-product (multiplier exp)
20 (deriv (multiplicand exp) var))
21 (make-product (deriv (multiplier exp) var)
22 (multiplicand exp))))
23 (define (make-exponentiation base exp)
24 (list '** base exp))
25 (define (base s) (car s))
26 (define (exponent s) (cadr s))
27 (define (deriv-exponentiation exp var)
28 (make-product
29 (make-product
30 (exponent exp)
31 (make-exponentiation
32 (base exp)
33 (- (exponent exp) 1)))
34 (deriv (base exp) var)))
35 (put 'deriv '** deriv-exponentiation)
36 (put 'deriv '+ deriv-sum)
37 (put 'deriv '* deriv-product))