racket(plt scheme升级版) 下载地址:http://racket-lang.org/download/
习题:1.3 定义一个过程,它以三个数作为参数,返回其中两个数之和
#lang racket
(define (min x y)
(if (> x y)
y
x)
)
(define (mul-min x y z)
(if (> (min x y) z)
z
(min x y)))
(define (add-two-bigger x y z)
(- (+ x y z)
(mul-min x y z)))
(add-two-bigger -3 -6 3)
习题:1.5 正则序和应用序 解释情况
答:应用序 p一直递归,死循环。 正则序可以输出0
例子1:牛顿法求平方根
#lang racket
(define (square x)
(* x x))
(define (improve guess x)
(/ (+ (/ x guess) guess) 2)
)
(define (enough? guess x)
(> 0.0001
(abs(- (square guess) x))))
(define (sqrt-iter guess x)
(if (enough? guess x)
guess
(sqrt-iter (improve guess x)
x))
)
(define (sqrt x)
(sqrt-iter 1.0 x))
(sqrt 4)
习题1.6 创造new-if来代替if方法。
#lang racket
(define (square x)
(* x x))
(define (improve guess x)
(/ (+ (/ x guess) guess) 2)
)
(define (enough? guess x)
(> 0.0001
(abs(- (square guess) x))))
(define (new-if p then-clause else-clause)
(cond (p then-clause)
(else else-clause)))
(define (sqrt-iter guess x)
(new-if (enough? guess x)
guess
(sqrt-iter (improve guess x)
x))
)
(define (sqrt x)
(sqrt-iter 1.0 x))
(sqrt 4)
答:出现死循环,原因是:解释器使用应用序进行解析代码,对于求值描述是首先对运算符和各个运算对象求值,而后将得到的过程应用于得到的实际参数。所以对于new-if中的方法,他会先去计算p then-clause else-clause全部计算好,然后再执行cond方法,这个导致了else-clause出现了递归,一直重复计算。
习题1.7 更改enough方法
#lang racket
(define (sqrt3 x)
(sqrt3-iter 1.0 x 0.1))
(define (sqrt3-iter guess x last-guess)
(if (enough? guess last-guess)
guess
(sqrt3-iter (improve guess x) x guess)))
(define (enough? guess last-guess)
(> 0.00001 (/ (abs (- guess last-guess)) guess)))
(define (improve guess x)
(/ (+ (/ x (* guess guess)) (* 2 guess)) 3))
(sqrt3 2000000000000000000000007)
把这个与1.8代码做对比,确实时间上差很多
习题1.8 求立方根
#lang racket
(define (sqrt3 x)
(sqrt3-iter 1.0 x))
(define (sqrt3-iter guess x)
(if (enough? guess x)
guess
(sqrt3-iter (improve guess x) x)))
(define (enough? guess x)
(> 0.00001 (abs (- (* guess guess guess) x))))
(define (improve guess x)
(/ (+ (/ x (* guess guess)) (* 2 guess)) 3))
(sqrt3 27)
分享到:
相关推荐
《计算机程序构造和解释》(SICP,Structure and Interpretation of Computer Programs)是一本具有深远影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman编写,MIT Press出版。这门课程由北京大学数学...
《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...
《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...
《SICP习题解答,主要第一章的内容习题答案》 SICP,全称《Structure and Interpretation of Computer Programs》(计算机程序的构造和解释),是计算机科学领域的一本经典教材,由MIT(麻省理工学院)的 Harold ...
### SICP——《计算机程序的结构与解释》 #### 一、概述 《计算机程序的结构与解释》(Structure and Interpretation of Computer Programs, 简称SICP)是一本由MIT电气工程与计算机科学系教授Harold Abelson和...
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh
本书名为《a_book_sicp_py》,是一本以Python语言为基础介绍设计模式和计算机科学基础的书籍。根据描述和部分内容,可以提炼出以下知识点: 1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关...
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...
《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...
SICP 使用的scheme解释器 以前叫DrScheme
《计算机程序的构造和解释》(SICP)是一本极具影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,MIT出版社出版。这本书以其深入探讨编程概念、程序设计方法以及计算机系统的工作原理而闻名。1-3...
《SICP(Structure and Interpretation of Computer Programs)》是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,它强调了程序设计的基础和原理,特别是函数式编程思想。第二章主要探讨了...
SICP-Python版本
《SICP》全称是《Structure and Interpretation of Computer Programs》,中文译为《计算机程序的构造和解释》。这是一本经典的计算机科学教材,由Harvard大学的 Harold Abelson 和 Gerald Jay Sussman 教授撰写,...
Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用
### 结构与解释计算机程序 (SICP) #### 标题和描述中的核心知识点解析 **《结构与解释计算机程序》(Structure and Interpretation of Computer Programs, SICP)** 是由哈佛大学的 Harold Abelson 和麻省理工学院...
《伯克利计算机思维训练课程SICP高清版》是一门深入浅出的计算机科学入门课程,旨在为初学者提供坚实的计算机思维基础和软件工程理念。该课程源于世界顶尖学府加州大学伯克利分校,以其高质量的教学内容和实用价值...
资源名称:sicp 和 操作系统:精髓与设计原理第七版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。