Created
December 2, 2015 03:48
-
-
Save ruandao/7b9efc99bf0ad2298497 to your computer and use it in GitHub Desktop.
2.73.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;#lang planet neil/sicp | |
| #lang racket | |
| (require (planet soegaard/sicp:2:1/sicp)) | |
| (define wave einstein) | |
| (define (deriv exp var) | |
| (cond ((number? exp) 0) | |
| ((variable? exp) (if (same-variable? exp var) 1 0)) | |
| (else ((get 'deriv (operator exp)) (operands exp) var)))) | |
| (define (operator exp) (car exp)) | |
| (define (operands exp) (cdr exp)) | |
| ;; sum | |
| (define (install-sum-derivative-package) | |
| ;; internal procedures | |
| (define (addend operands) (car operands)) | |
| (define (augend operands) (cdr operands)) | |
| (define (deriv-sum operands var) | |
| ('+ (deriv (addend operands) var) | |
| (deriv (augend operands) var))) | |
| ;; interface to the rest of the system | |
| (put 'deriv '+ deriv-sum) | |
| 'done) | |
| ;; product | |
| (define (install-product-derivative-package) | |
| ;; internal procedure | |
| (define (multiplier operands) (car operands)) | |
| (define (multiplicand operands) (cdr operands)) | |
| (define (deriv-product operands var) | |
| ('+ ('* (deriv (multiplier operands) var) | |
| (multiplicand operands)) | |
| ('* (multiplier operands) | |
| (deriv (multiplicand operands) var)))) | |
| ;; interface to the rest of the system | |
| (put 'deriv '* deriv-product) | |
| 'done) | |
| (define (install-subtract-derivative-package) | |
| ;; internal procedure | |
| (define (subtrahend operands) (car operands)) | |
| (define (minuend operands) (cadr operands)) | |
| (define (deriv-sub operands var) | |
| ('- (deriv (subtrahend operands) var) | |
| (deriv (minuend operands) var))) | |
| ;; interface to the rest of the system | |
| (put 'deriv '- deriv-sub) | |
| 'done) | |
| (define (install-exponentiation-derivative-package) | |
| ;; internal procedure | |
| (define (base operands) (car operands)) | |
| (define (exponent operands) (cadr operands)) | |
| (define (deriv-exponentiation operands var) | |
| (let ((n (exponent operands)) | |
| (u (base operands))) | |
| ('* ('* n | |
| ('** u ('- n 1))) | |
| (deriv u var)))) | |
| ;; interface to the rest of the system | |
| (put 'deriv '** deriv-exponentiation) | |
| 'done) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment