3 (define (deriv exp var)
6 [(variable? exp) (if (same-variable? exp var) 1 0)]
7 [else ((get 'deriv (operator exp)) (operands exp)
10 (define (operator exp) (car exp))
11 (define (operands exp) (cdr exp))
16 The 'get' procedure fetches from the table, an appropriate lambda
17 function which takes as input, the operands and the variable. The
18 function will return the appropriate expressions for addition and
21 In theory we can define dispatch functions for number? and variable?.
22 But for those functions, the dispatch functions will return a
23 constant regardless of the input operands.
29 (make-sum (deriv (addend exp) var)
30 (deriv (augend exp) var))))
34 (make-sum (make-product (multiplier exp)
35 (deriv (multiplicand exp) var))
36 (make-product (deriv (multiplier exp) var)
37 (multiplicand exp)))))
39 (define (install-deriv-package)
40 ;; internal procedures
41 (define (make-sum a1 a2) (list '+ a1 a2))
42 (define (make-product m1 m2) (list '* m1 m2))
43 (define (addend s) (car s))
44 (define (augend s) (cadr s))
45 (define (multiplier p) (car p))
46 (define (multiplicand p) (cadr p))
48 (define (variable? x) (symbol? x))
49 (define (same-variable? v1 v2)
50 (and (variable? v1) (variable? v2) (eq? v1 v2)))
51 (put 'deriv '+ deriv-sum)
52 (put 'deriv '* deriv-prod))
55 (define deriv-exponentiation
57 (make-product (exponent exp)
58 (make-product (make-exponentiation (base exp)
60 (deriv (base exp) var)))))
62 (define (make-exponent base exp)
64 (define (base x) (car x))
65 (define (exponent x) (cadr x))
66 (put 'deriv '** deriv-exponentiation)
70 If we modify get, we just modify put and nothing else.