Created
December 1, 2015 22:32
-
-
Save ruandao/0aec7afbe998e09cee42 to your computer and use it in GitHub Desktop.
2.73.b data-directed derivative system
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 (make-sum a b) (list '+ a b)) | |
| (define (deriv-sum operands var) | |
| (make-sum (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) | |
| (install-sum-derivative-package) | |
| ;; internal procedure | |
| (define (multiplier operands) (car operands)) | |
| (define (multiplicand operands) (cdr operands)) | |
| (define (make-product a b) (list '* a b)) | |
| (define (deriv-product operands var) | |
| (make-sum (make-product (deriv (multiplier operands) var) | |
| (multiplicand operands)) | |
| (make-product (multiplier operands) | |
| (deriv (multiplicand operands) var)))) | |
| ;; interface to the rest of the system | |
| (put 'deriv '* deriv-product) | |
| 'done) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment