SICP 习题1.31开始拔高我们的抽象能力,向更高的高度进发,以更好地理解高阶函数。
习题1.31是基于1.30的。
在习题1.30中我们定义了累加的过程sum,其实我们可以发现,这种累积操作是可以做更高的抽象的。
在做更高的抽象之前让我们看看使用乘法做累积的代码是什么样的,这就是题目要求我们完成的第一个任务,做函数值的乘积。
定义出来的过程如下:
(define (product term a next b)
(if (> a b)
1
(* (term a)
(product term (next a) next b))))
可以发现,除了其中的+号变成了*号,初始值由0变成了1,这个过程和sum几乎是一样的。
另外,题目还要求我们实现迭代版的函数值乘积,定义出来的过程如下:
(define (product-iter term a next b )
(define (iter a result)
(if (> a b)
result
(iter (next a) (* (term a) result))))
(iter a 1))
同样,迭代版的乘积累积过程和迭代版的累加过程几乎是一样的,除了*号代替+号,1代替0.
不知道在哪里听说过,如果我们在重复输入大量相同的代码,肯定是哪里出问题了。
我们应该是把乘法的累积和加法的累积做成一个抽象的叫“累积”的过程,然后将“乘法”或者是“加法”作为参数传进去。
当然,这一切是在高阶函数成立的条件下才可以做到的。
这就是后面的习题1.32要做的事情,更多的我们在下一题再讨论。
回到习题1.31,题目还要求我们根据公式“pie/4=(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*(8/7)…”求出pie的近似值。
其实我们可以将以上公式写成下面这样:
pie/4=f(1)*f(2)*f(3)*f(4)*f(5)*f(6)…f(k)
其中,如果k是偶数,f(k)=(K+2)/(k+1)
如果k是奇数,f(k)=(k+1)/(k+2)
使用Scheme代码定义的这个f(k)为:
(define (for-pie k)
(if (even? k)
(/ (+ k 2) (+ k 1))
(/ (+ k 1) (+ k 2))))
这样我们可以利用上面的product过程来完成习题,定义的过程如下:
(define (generate-pie n)
(* (product for-pie 1 next-integer n) 4.0))
其中next-integer用于生成下一个整数,过程如下:
(define (next-integer a) (+ a 1))
分享到:
相关推荐
SICP 习题答案 计算机程序的构造和解释 1-3章 习题答案
SICP习题解答,主要第一章的内容习题答案
NULL 博文链接:https://pengpeng.iteye.com/blog/1344689
SICP 解题集
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
SICP-Python版本
SICP 使用的scheme解释器 以前叫DrScheme
sicp 2.2.4节图形语言的racket程序包,配置路径,C:\Users\Administrator\AppData\Roaming\Racket
Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用
SICP CHINESE ENGLISH THE SECOND EDITION SICP CHINESE ENGLISH THE SECOND EDITION
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh
资源来自pypi官网。 资源全名:sicp-0.0.1b102.dev4.tar.gz
sicp 2ed高清pdf,以及相对应的mit课程资料及习题答案打包,中文版的视频在这里http://i.youku.com/i/UNTcxODk3ODQw/videos?spm=a2hzp.8244740.0.0
SICP 解题集《计算机程序的构造和解释》练习题解集。安装 MIT/GNU Scheme(macOS)下载:下载后运行 .dmg 文件,把 MIT/GNU Scheme.app 拖入 Applications 文件夹在 Applications/应用程序 文件夹中找到 MIT/GNU ...
sicp-in-python(中文版+英文版)PDF 背景. SICP 全称Structure and Interpretation of Computer Programs,翻译过来叫《计算机程序的构造和解释》使用python
资源名称:sicp 和 操作系统:精髓与设计原理第七版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
经典书籍《计算机程序的构造与解释》,UCB热门课程CS61a的官方教材
#SICP SICP解决方案