scheme 符号求导
为了阐释符号操作,下面计划设计一个执行代数表达式求导的符号求导过程。
(define (deriv exp var)
(cond ((number? exp) 0)
((variable? exp)
(if (same-variable? exp var) 1 0))
((sum? exp)
(make-sum (deriv (addend exp) var)
(deriv (augend exp) var)))
((product? exp)
(make-sum
(make-product (multiplier exp) (deriv (multiplicand exp) var))
(make-product (multiplicand exp) (deriv (multiplier exp) var))))
((exponentiation? exp)
)
(else (error "unknown expression type" exp))))
(define (variable? x) (symbol? x))
(define (same-variable? v1 v2)
(and (variable? v1) (variable? v2) (eq? v1 v2)))
(define (make-sum a1 a2) (list '+ a1 a2))
(define (make-product m1 m2) (list '* m1 m2))
(define (sum? x) (and (pair? x) (eq? (car x) '+)))
(define (addend s) (cadr s))
(define (augend s) (caddr s))
(define (product? x) (and (pair? x) (eq? (car x) 'x)))
(define (multiplier p)(cadr p))
(define (multiplicand p) (caddr p))
(define (multiplicand p)(caddr p))
练习2.56
设计一个求乘幂的过程。
(define (exponential? x) (and (pair? x) (eq? (car x) ')))
(define (base x) (cadr x))
(define (exponent x) (caddr x))
(define (make-exponential base exponent)
(cond ((=number? exponent 0) 1)
((=number? exponent 1) base)
(else (list ' base exponent))))
(define (deriv-exponential exp var)
(make-product
(make-product
(exponent exp)
(make-exponential (base exp)
(make-sum (exponent exp) -1)))
(deriv (base exp) var)))

浙公网安备 33010602011771号