摘要: 练习2.5这道题的意思是有一个新的cons,其接受两个参数a、b,并且返回(2^a)*(3^b)。这个比较容易实现了。(define (cons a b)(* (expt 2 a) (expt 3 b)))(cons 2 2);Value: 36根据题中的意思,并将其与car和cdr类比,得知c... 阅读全文
posted @ 2015-02-17 20:10 nomasp 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 练习2.4直接运用对比的技巧就可以猜测出相应的cdr表示如下:(define (cdr z)(z (lambda (p q) q)))但我们还是要按照题中要求用代换模型来检验。先来检验car的。(car (cons 0 1))(car (lambda (m) (0 1)))((lambda (z... 阅读全文
posted @ 2015-02-17 20:09 nomasp 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 练习2.3我们并不必急于写出点什么,先来回过头看看书吧。第56页说到了一种称为按愿望思维的强有力的综合策略。在这道题里,我们就可以假设已经写好了能够表示矩形的代码,以及能够求矩形长和宽的函数。于是像先定义出add-rat一样,我们先定义出求矩形的周长和面机的函数。(define(get-peri... 阅读全文
posted @ 2015-02-17 20:09 nomasp 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 练习2.2(define(make-segment start-point end-point)(cons start-point end-point))(define(start-segment seg)(car seg))(define(start-segment seg)(cdr seg)... 阅读全文
posted @ 2015-02-17 20:08 nomasp 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 练习2.1我们已经进入了新的一章,这本书还是蛮会循序渐进的嘛,第一题挺简单的。(define(make-rat n d)(let ((g (gcd n d)))(if (< d 0)(cons (- (/ n g)) (- (/ d g)))(cons n d)))) ... 阅读全文
posted @ 2015-02-17 20:08 nomasp 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 练习1.46这道题要求我们写一个过程iterative-improve,其接受两个过程为参数,一个是判断检测是否足够好的good-enough?和另一个改进猜测的improve。其有一个猜测的数字作为参数,然后返回的是一个过程。我们先来写出这个iterative-improve过程。(defin... 阅读全文
posted @ 2015-02-17 20:06 nomasp 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 练习1.45如果看到前面的文章,应该知道我喜欢将某个变量n先设成一个固定的数比如3、4什么的。这里我们依旧如此,先来看看如何写出开四次方根的过程。这道题的目的旨在让我们好好回顾前面的内容,毕竟只剩下一道题我们就完完全全的解决了第一章。下面我来带大家一起回顾一下。fixed-point是以1个函数... 阅读全文
posted @ 2015-02-17 20:06 nomasp 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 练习1.44相信如果大家认真做了前面的几道习题,这一题就比较简单了。smooth过程几乎可以直接写出:(define smooth(lambda (f)(lambda (x)(/ (+ (f (- x dx))(f x)(f (+ x dx)))3))))当然,在这之前应该先将dx关联一个数值,... 阅读全文
posted @ 2015-02-17 20:05 nomasp 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 练习1.43我不想一开始就将结果贴出啦,而是通过叙述自己的思考来完成这篇博客。上一题中我在纸上写下“传入2个过程并返回1个过程”,事实证明挺有效的,于是这次我也依旧这么做了。repeated需要传入一个过程和一个数字,这个数字决定了这个过程的执行次数。repeated还要返回1个过程,而这个过程... 阅读全文
posted @ 2015-02-17 20:04 nomasp 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 练习1.42这道题让我彻底爱上了lambda。复合这一概念早在数学中便已经学过了,我们先来根据题目的意思写出能够平方和能够加一这两个过程。可能是因为我看书不认真吧,写了很多次才完成这两个过程。一开始我都是以(define (inc f)......)来开始的,但是每次都没有返回结果。终于醒悟了,... 阅读全文
posted @ 2015-02-17 20:03 nomasp 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 练习1.41对于一个接受单个参数x的函数f来说,要将它应用多一次的办法是执行以下表达式:(f (f a))由此可得相应的double函数,它接受一个函数f,并且返回一个能将f应用两次的过程:(define (double f)(lambda (x)(f (f x))))(让f作为一个过程)(((... 阅读全文
posted @ 2015-02-17 20:02 nomasp 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 练习1.40首先根据公式x^3+ax^2+bx+c写出相应的cubic过程,它的返回值是一个接受参数x的过程:(define (cubic a b c)(lambda (x)(+ (cube x)(* a (square x))(* b x)c)))(newtons-method (cubic ... 阅读全文
posted @ 2015-02-17 20:01 nomasp 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 练习1.39没想到最后一道题如此简单,n和d的过程可以如下定义:(define (n i)(if (= i 1)i(- (* i i))))(define (d i)(- (* 2 i) 1))这里我们就不再重复写成块结构了。(define (tan-cf x k)(cont-frac n d ... 阅读全文
posted @ 2015-02-17 20:01 nomasp 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 练习1.38我最喜欢做数学上的观察题了,这里也有一个Di,其依次为1,2,1,1,4,1,1,6,1,1,8……我最先看到的是除了一开始的2个之外,每三个数字的规律是前面是两个1,后面是个递增的偶数。于是我们便可轻而易举的写出这个函数了。(define (d i)(if (= (remainde... 阅读全文
posted @ 2015-02-17 20:00 nomasp 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 练习1.37根据题目中的意思通过观察得到k项有项连分式的一种表达方式:f=N1/(D1+(N2/(…+Nk/Dk)))这个式子可以不断展开,但如果我们把每一个”+”后面的式子记作T(i)。不对,我们应该将每一个N/D记作T(i),因为这组式起始于N/D,且中止与N/D。计N1/D1为T(1),N... 阅读全文
posted @ 2015-02-17 19:59 nomasp 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 练习1.36这道题要求我们根据书上的newline和display来完成一个新版本的fixed-point。根据题目内容我们分为如下步骤:1、写出能够打印出计算中产生的近似值序列的函数。2、将第一步中的函数写入fixed-point中。3、根据题中的映射关系写出对应函数。4、根据下一节的内容写出... 阅读全文
posted @ 2015-02-17 19:59 nomasp 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 练习1.35依旧是每一小节中比较简单的第一题,计算黄金分割率的过程如下:(define get-golden-ratio(fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0))虽然比较简单,但我们还是测试一下:get-golden-ratio;Value: 1.... 阅读全文
posted @ 2015-02-17 19:58 nomasp 阅读(97) 评论(0) 推荐(0) 编辑