ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

scheme 符号求导

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)))

返回列表