第一章两天前就读完了,因为工作上的事情拖到现在才来做最后这七道题,这些题目都是要求写一个过程返回另一个过程作为结果。
习题1.40,显而易见,要求cubic过程返回的就是方程本身,照着定义来就行了:
<!---->(define (cubic a b c)
(lambda(x) (+ (* x x x) (* a x x) (* b x) c)))
习题1.41,注意到了题目已经说明了:以
有一个参数的过程做参数,那就很简单了:
<!---->(define (double g) (lambda(x) (g (g x))))
返回lambda构造的过程,参数过程应用两次即可,那么
<!---->> (((double (double double)) inc) 5)
21
习题1.42,组合应用:
<!---->(define (composite f g)
(lambda(x) (f (g x))))
习题1.43,在1.42基础上使用递归即可:
<!---->(define (repeated f n)
(if (= n 1)
f
(composite f (repeated f (- n 1)))))
习题1.44,在1.43基础上,首先定义smooth过程:
<!---->(define (smooth f)
(lambda(x) (/ (+ (f (- x dx)) (f x) (f (+ x dx))) 3)))
然后使用repeated过程产生n次平滑函数:
<!---->(define (repeate-smooth n)
(repeated smooth n))
习题1.45,不是一下子能说清楚,经过测试可以知道n次方根搜索不动点,平均阻尼需要经过log2(n)(以2为底的对数)重复才会收敛,因此:
<!---->(define (nth-root-test x n k)
(fixed-point ((repeated average-damp k) (lambda (y) (/ x (fast-expt y (- n 1)))))
1.0))
习题1.46,这题很有趣,产生过程的过程也是递归的,相当好玩,iterative-improve产生的过程需要递归调用自身,仍然使用iterative-improve产生:
<!---->(define (iterative-improve good-enough improve-it)
(lambda(guess)
(if (good-enough guess)
guess
((iterative-improve good-enough improve-it) (improve-it guess)))))
如果猜测结果足够,返回猜测结果,如果没有,递归调用lambda产生的这个过程应用于改进后的猜测值。
重写sqrt如下:
<!---->(define (sqrtt x)
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.0001))
(define (improve guess)
(average guess (/ x guess)))
(iterative-improve good-enough? improve))
注意,这里的sqrrt过程产生的是一个以初始猜测值为参数的过程,所有调用应该这样:
<!---->> ((sqrtt 4) 1.0)
2.000000000929222947
下面的fixed-point过程也是如此。
重写fixed-point过程如下:
<!---->(define (fixed-point f)
(define tolerance 0.00001)
(define (good-enough? guess)
(< (abs (- guess (f guess))) tolerance))
(define (improve guess) (f guess))
(iterative-improve good-enough? improve))
分享到:
相关推荐
做些 scip1.4考试题对你过JAVA决对有帮助
SCIP(Solving Constraint Integer Programs)是一个开源的数学优化求解器,主要用于处理整数规划问题,包括线性、混合整数、二元、逻辑和非线性规划等。SCIP由Zuse Institute Berlin开发,广泛应用于运营研究、数学...
10. 开发团队和生态系统:SCIP的背后是一个由31名活跃开发者组成的团队,他们同时进行着7个学士和硕士项目、16个博士项目,以及有8位博士后和教授参与。它还拥有四个德国的开发中心,包括ZIB(柏林工业大学)、...
7. `addConsNode` 方法:用于添加一个节点约束。 8. `addConsOr` 方法:用于添加一个逻辑或约束。 9. `addConss` 方法:用于添加多个约束。 10. `addConsSOS1` 方法:用于添加一个特殊的顺序集约束。 其他方法 ...
SCIP(Solving Constraint Integer Programs)是一个开源的数学优化求解器,专门用于解决混合整数线性规划(MILP)、混合整数二次规划(MIQP)以及其他类型的整数优化问题。它是一个完整的框架,包含了建模语言、...
scip提供了windows下的一个可用工具,压缩包有三个文件,scip-3.1.1.1.win.x86_64.msvc.opt.spx.ld.dll,scip-3.1.1.1.win.x86_64.msvc.opt.spx.ld.exe,scip-3.1.1.1.win.x86_64.msvc.opt.spx.ld.lib
在Python编程环境中,SCIP(Solving Constraint Integer Programs)是一个强大的优化求解器,用于处理混合整数规划问题,包括线性和非线性规划。它提供了丰富的接口,使得开发者能够利用Python来构建和求解复杂的...
在学习和开发STM32的过程中,"scip"可能是指“System Configuration and Integration Platform”,这是一个集成开发环境或者开发工具,用于简化STM32的编程和调试工作。SCIP通常包含代码编辑器、编译器、调试器以及...
非线性优化是一种在数学和计算机科学中广泛使用的求解问题的方法,特别是在工程、经济学、机器学习和...3rd_soplex和3rd_scip这两个文件可能是SCIP和Soplex的第三方库或者特定版本,用于在项目中集成和使用这两个工具。
https://blog.csdn.net/xiaofei473/article/details/107731714?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-5&spm=1001.2101.3001.4242借助前人的博文,下载了OPTI Toolbox的第三方工具箱,...
MATLAB OPTI Toolbox工具箱,包括OPTI-OPTI_Toolbox_v2.28_Released.zip、optiMEXFiles_mexw64_2_28.zip、scip.mexw64和sedumi-1.3.4.zip文件,是目前求解器相对比较全的安装文件,在本人博客中有配套的安装说明。
创建一个求解器实例,并使用初始化内部C数据结构 Scip scip = new SCIP(); scip.create("Example"); 这等效于在C中调用SCIPcreate(&scip)和SCIPcreateProbBasic(scip, "Example") 。 最重要的类是Scip.java,...
这款模拟器的一大特色是它支持SCIP2.0(Sick Communication Interface Protocol 2.0)协议,这是Sick公司为其激光传感器设备定义的一种通信协议。 SCIP2.0协议是用于与Sick品牌的激光测距仪进行数据交换的标准,...
64位动态链接库。 要的拿去,免费,不用谢。 链接时请注意原工程文件是不是64位的,不然会出现无法调用错误。 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
这个压缩包中的"SCIP-learning-master"文件夹很可能包含了与SICP教材相关的代码示例、练习题以及可能的解答,帮助读者更好地理解和掌握书中的概念。 首先,让我们探讨Scheme的基础知识。Scheme的语法极其简洁,以...
SCIP2.0(Sensor Communication Interface Protocol 2.0)是一种由传感器接口研究小组开发的通信协议,旨在为机器人应用提供灵活且高效的传感器接口。该协议的目的是确保不同类型的传感器能有效地与机器人系统进行...
SCIP(Solving Constraint Integer Programs)是一个开源的数学优化求解器,主要用于处理整数规划问题,包括线性、混合整数、二次和二次约束线性规划等。SCIPSimple 源码则是 SCIP 库的一个简化版本或者特定实现,...
为了使用此存储库中可用的源代码,您必须具有一个可用的SCIP版本。 您可以从下载SCIP。 使用这个资料库 该存储库提供了一个帮助程序脚本,用于将存储库中的源代码与SCIP 6.0发行版中的源代码同步。 您可以通过调用...
Conda 将自动安装 SCIP,因此所有内容都可以在单个命令中安装: conda install --channel conda-forge pyscipopt 使用 PyPI 和源代码 有关说明,请参阅 。 请注意,最新的 PySCIPOpt 版本通常只与 SCIP 优化套件...
2. 对象与抽象:SICP第二章介绍了如何使用对象来构建抽象。Python是一门面向对象的语言,通过类和对象的定义,可以实现复杂的数据抽象,提供了一种组织和封装数据及行为的方法。 3. 控制结构:包括条件语句和循环等...