Blob


1 (defun make-exponentiation (base exp)
2 (cond ((=number? exp 0) 1)
3 ((=number? exp 1) base)
4 ((and (numberp base) (numberp exp))
5 (expt base exp))
6 (t (list '** base exp))))
8 (defun exponentiation? (x)
9 (and (consp x) (eql (car x) '**)))
10 (defun base (x)
11 (cadr s))
12 (defun exponent (s)
13 (caddr s))
14 (defun deriv (expr var)
15 (cond ((numberp expr) 0)
16 ((variable? expr)
17 (if (same-variable? expr var) 1 0))
18 ((exponentiation? expr)
19 (make-product
20 (make-product
21 (exponent expr)
22 (make-exponentiation
23 (base expr)
24 (1- (exponent expr))))
25 (deriv (base expr) var)))
26 ((sum? expr)
27 (make-sum (deriv (addend expr) var)
28 (deriv (augend expr) var)))
29 ((product? expr)
30 (make-sum
31 (make-product (multiplier expr)
32 (deriv (multiplicand expr) var))
33 (make-product (deriv (multiplier expr) var)
34 (multiplicand expr))))
35 (t (error "unknown expression type -- DERIV ~A" expr))))