Blame


1 665c255d 2023-08-04 jrmu (define (deriv exp var)
2 665c255d 2023-08-04 jrmu (cond ((number? exp) 0)
3 665c255d 2023-08-04 jrmu ((variable? exp)
4 665c255d 2023-08-04 jrmu (if (same-variable? exp var) 1 0))
5 665c255d 2023-08-04 jrmu ((sum? exp)
6 665c255d 2023-08-04 jrmu (make-sum (deriv (addend exp) var)
7 665c255d 2023-08-04 jrmu (deriv (augend exp) var)))
8 665c255d 2023-08-04 jrmu ((product? exp)
9 665c255d 2023-08-04 jrmu (make-sum
10 665c255d 2023-08-04 jrmu (make-product (multiplier exp)
11 665c255d 2023-08-04 jrmu (deriv (multiplicand exp) var))
12 665c255d 2023-08-04 jrmu (make-product (deriv (multiplier exp) var)
13 665c255d 2023-08-04 jrmu (multiplicand exp))))
14 665c255d 2023-08-04 jrmu (else
15 665c255d 2023-08-04 jrmu (error "unknown expression type -- DERIV" exp))))
16 665c255d 2023-08-04 jrmu (define (variable? x) (symbol? x))
17 665c255d 2023-08-04 jrmu (define (same-variable? v1 v2)
18 665c255d 2023-08-04 jrmu (and (variable? v1) (variable? v2) (eq? v1 v2)))
19 665c255d 2023-08-04 jrmu (define (make-sum a1 a2) (list '+ a1 a2))
20 665c255d 2023-08-04 jrmu (define (make-product m1 m2) (list '* m1 m2))
21 665c255d 2023-08-04 jrmu (define (sum? x)
22 665c255d 2023-08-04 jrmu (and (pair? x) (eq? (car x) '+)))
23 665c255d 2023-08-04 jrmu (define (addend s) (cadr s))
24 665c255d 2023-08-04 jrmu (define (augend s) (caddr s))
25 665c255d 2023-08-04 jrmu (define (product? x)
26 665c255d 2023-08-04 jrmu (and (pair? x) (eq? (car x) '*)))
27 665c255d 2023-08-04 jrmu (define (multiplier p) (cadr p))
28 665c255d 2023-08-04 jrmu (define (multiplicand p) (caddr p))
29 665c255d 2023-08-04 jrmu (define (exponentiation? x)
30 665c255d 2023-08-04 jrmu (and (pair? x) (eq? (car x) '**)))
31 665c255d 2023-08-04 jrmu (define (base e) (cadr e))
32 665c255d 2023-08-04 jrmu (define (exponent e) (caddr e))