`
SavageGarden
  • 浏览: 219921 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SICP学习笔记 2.3.2 实例:符号求导

    博客分类:
  • SICP
阅读更多

    练习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-memo-ans:SICP笔记和答案

    请参考那些正在学习SICP的人。 笔记 如果你想在 gauch 中使用随机函数 (use math.mt-random) (define m (make <mersenne> :seed (sys-time))) (mt-random-integer m 1000) (define (random n) (mt-random-integer ...

    sicp-js-zh:【译】NUS CS1101s SICP JavaScript 描述

    NUS CS1101s SICP JavaScript 描述原文:协议:如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。——David Leinweber贡献指南本项目需要校对,欢迎大家提交 Pull Request。...

    sicp和操作系统:精髓与设计原理第七版

    资源名称:sicp 和 操作系统:精髓与设计原理第七版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    sicp-compiler-notes:有关SICP编译器的一些说明和演示

    在SICP上进行试用-> WASM编译演示:SICP如何将机器代码注册为WASM 为阶乘翻译LISP代码(define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))...

    sicp-py-zh:【译】UCB CS61a SICP Python

    - **操作符和表达式**:学习如何处理和操作符号,理解表达式的计算过程。 9. **动态类型**: - **类型检查**:Python是动态类型的,意味着在运行时确定变量类型。 - **类型转换**:如何在不同类型之间转换数据。...

    sicp_but_clojure:Clojure中的SICP示例和练习

    这些源代码文件扩展了./resources中的笔记内容,提供了解决SICP练习的实际实现。学习者可以通过阅读和修改这些代码,加深对Clojure语法和SICP概念的理解。 在Clojure中实现SICP的益处在于: - **函数式编程的思维...

    sicp-eg-ex:sicp课程视频示例,自己的笔记,习题题解

    本文将围绕"Sicp-eg-ex"这个项目,结合标题和描述,探讨在学习SICP过程中遇到的例子、笔记和习题解,特别是环境检查方案9.5的相关知识点。 首先,我们关注到的是"SICP课程视频示例"。SICP课程的核心在于通过实际的...

    sicp-study-group:一个研究计算机程序结构和解释(SICP)的研究小组

    1. **阅读材料**:可能是SICP书的章节摘要、笔记或者补充阅读材料,帮助学习者更好地理解和消化书中的概念。 2. **代码实现**:小组成员可能用JavaScript实现了SICP中的各种算法和解释器,这有助于实践和理解书中...

    sicp-to-z80:一台SICP寄存器机到TI-84 Z80编译器

    最终目标是完全支持SICP指令集,然后使用此编译器将Scheme编译为Z80,或直接将Scheme编写为Z80。 无论哪种方式,该项目对我来说也意味着可以在TI-84(不是最好的语言)上探索Z80装配中的编程。特征显示字符串和数字...

    sicp 和 操作系统:精髓与设计原理第七版打包

    《SICP》(Structure and Interpretation of Computer Programs)是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman合著,MIT出版社出版。这本书主要探讨了程序设计语言的基础,以及如何构建和理解...

    sicp_notes:SICP笔记和练习

    《SICP笔记和练习》是一份详尽的资源,主要涵盖了由MIT教授们编写的经典计算机科学教材《Structure and Interpretation of Computer Programs》(简称SICP)的学习笔记和练习解答。这份资料以HTML格式呈现,便于在线...

    SICP:SICP解决方案

    《SICP:SICP解决方案》是针对结构与解释程序设计(Structure and Interpretation of Computer Programs,简称SICP)这本书的详细解答和实践指南。SICP是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay ...

    sicp in python 中文版 sicp

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh

    SICP:学习计算机程序的结构和解释

    《SICP:学习计算机程序的结构和解释》是一本极具影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman合著,并由 MIT Press 出版。这本书主要探讨了程序设计的基础原理和方法,通过使用Scheme编程语言...

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh

    Learn_sicp:学习sicp的一些代码

    《学习SICP:探索Racket编程的艺术》 SICP,全称为《Structure and Interpretation of Computer Programs》(计算机程序的结构与解释),是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman合著,...

    sicp-clojure:在 Clojure 中解决的 SICP 练习

    在 sicp-clojure 中,你会看到如何使用 Clojure 的基本数据类型,如符号(symbols)、列表(lists)、数字和字符串,以及如何定义函数(functions)。 2. **函数式编程**:Clojure 强调纯函数(pure functions),...

    sicp 2.2.4节图形语言

    总的来说,SICP 2.2.4节的图形语言不仅是学习Scheme或Racket编程的一个重要部分,更是对计算思维和编程艺术的一次深入探索。通过实践和理解这些概念,你将能更好地理解和创造计算世界中的视觉表现形式。

Global site tag (gtag.js) - Google Analytics