练习2.56
(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 (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.57
;; 加法
(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.58
;; 修改加法的构造函数、选择函数和谓词
(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
练习2.59
;; 暂无
分享到:
相关推荐
sicp-py-zh:【译】UCB CS61a SICP Python
UCB CS61a SICP Python 描述 原文: 译者: 协议: 前面是山,我们就爬山;前面是海,我们就渡海;前面是皇宫,我们就开炮!——《龙族前传》 下载 Docker docker pull apachecn0/sicp-py-zh docker run -tid -p ...
请参考那些正在学习SICP的人。 笔记 如果你想在 gauch 中使用随机函数 (use math.mt-random) (define m (make <mersenne> :seed (sys-time))) (mt-random-integer m 1000) (define (random n) (mt-random-integer ...
NUS CS1101s SICP JavaScript 描述原文:协议:如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。——David Leinweber贡献指南本项目需要校对,欢迎大家提交 Pull Request。...
资源名称:sicp 和 操作系统:精髓与设计原理第七版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
在SICP上进行试用-> WASM编译演示:SICP如何将机器代码注册为WASM 为阶乘翻译LISP代码(define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))...
sicp 和 操作系统:精髓与设计原理第七版 文档打包。
sicp视频中的例子和自己的尝试 环境检查方案9.5
干燥剂 SCIP,但在Clojure中。 检查./resources文件夹中不同章节的笔记本: 更多示例代码和练习解决方案位于./src文件夹中。
最终目标是完全支持SICP指令集,然后使用此编译器将Scheme编译为Z80,或直接将Scheme编写为Z80。 无论哪种方式,该项目对我来说也意味着可以在TI-84(不是最好的语言)上探索Z80装配中的编程。特征显示字符串和数字...
SICP研究组 一个研究计算机程序结构和解释(SICP)的研究小组
sicp_notes SICP笔记和练习 资源 笔记 使用第一版,最高为ex 1.24。 从ex 1.31开始切换到第二版。
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh
Learn_sicp 学习sicp的一些代码
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
sicp-clojure 在 Clojure 中解决的 SICP 练习
#SICP SICP解决方案
sicp画图 sicp中的图片语言的js版本