練習2.56
(define (deriv exp var)練習2.57(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 (deriv (multiplier exp) var)
(multiplicand exp))))
((exponentiation? exp)
(make-product
(make-product (exponent exp)
(make-exponentiation (base exp) (- (exponent exp) 1)))
(deriv (base exp) var)))
(else (error "unknown expression type -- deriv" exp))))
;; 加法練習2.58(define (make-sum-list x list)
(if (null? list)
x(make-sum x
(make-sum-list (car list) (cdr list)))))
(define (make-sum-all x . y)
(make-sum-list x y))
;; 被加數
(define (augend-list s)
(let ((l (length s)))
(cond ((= l 1) 0)
((= l 2) (cadr s))
((= l 3) (augend s))
(else (cons '+ (cddr s))))))
;; 乘法
(define (make-product-list x list)
(if (null? list)
x(make-product x
(make-product-list (car list) (cdr list)))))
(define (make-product-all x . y)
(make-product-list x y))
;; 被乘數
(define (multiplicand-list p)
(let ((l (length p)))
(cond ((= l 1) 1)
((= l 2) (cadr p))
((= l 3) (multiplicand p))
(else (cons '* (cddr p))))))
;; 使用新的加法和乘法構造求導過程
(define (deriv exp var)
(cond ((number? exp) 0)
((variable? exp)
(if (same-variable? exp var) 1 0))
((sum? exp)
(make-sum-all (deriv (addend exp) var)
(deriv (augend-list exp) var)))
((product? exp)
(make-sum-all
(make-product-all (multiplier exp)
(deriv (multiplicand-list exp) var))
(make-product-all (deriv (multiplier exp) var)
(multiplicand-list exp))))
((exponentiation? exp)
(make-product-all
(make-product-all (exponent exp)
(make-exponentiation (base exp) (- (exponent exp) 1)))
(deriv (base exp) var)))
(else (error "unknown expression type -- deriv" exp))))
1 ]=> (deriv '(* x y (+ x 3)) 'x)
;value : (+ (* x y) (* y (+ x 3)))
;; 修改加法的建構函式、選擇函式和謂詞練習2.59(define (make-sum a1 a2)
(cond ((=number? a1 0) a2)
((=number? a2 0) a1)
((and (number? a1) (number? a2)) (+ a1 a2))
;;(else (list '+ a1 a2))))
(else (list a1 '+ a2))))
(define (addend s) (car s))
(define (augend s) (caddr s))
(define (sum? x)
(and (pair? x) (eq? (cadr x) '+))
;; 使用類似的方法修改乘法的建構函式、選擇函式和謂詞
1 ]=> (deriv '((x * y) * ( x + 3)) 'x)
;value : ((x * y) + (y * (x + 3)))
1 ]=> (deriv '(x + (3 * (x + (y + 2)))) 'x)
;value: 4
;; 暫無
SICP學習筆記(1 1 4 1 1 5)
sicp學習筆記 1.1.4 1.1.5 周銀輝 書接上一回,這裡是我在學習1.1.4 1.1.5時的一些筆記 1,標準過程與復合過程 以 scheme為例,作為一門語言,其內建了一些原始過程 或稱之為標準的過程 與scheme環境中,比如,實際上與某個內建過程關聯 繫結 了起來,該過程接收兩個引數...
SICP學習筆記(1 1 1 1 1 3)
sicp學習筆記 1.1.1 1.1.3 周銀輝 sicp,即structure and interpretation of computer programs,電腦程式的構造和解釋,是mit 麻省理工學院 一門經典課程,相信很多程式愛好者都讀過,最近我也抽空讀了讀,挺有意思的。算是對大學知識 高數...
SICP學習筆記(一)
一直在斷斷續續地看sicp,確實字字珠璣,今天總算看了前兩章,習題做了一部分,不過日後肯定還是要回頭重看的,現在略微回頭總結一下。1 好的程式語言應提供的三種機制 基本表示式 組合 抽象 實際上我們自己也可以為特定問題制定自己的 語言 是否具有上述能力是這個語言是否強大的關鍵 2 過程作為黑箱的抽象...