scip 第一章最后7题的解答

    第一章两天前就读完了,因为工作上的事情拖到现在才来做最后这七道题,这些题目都是要求写一个过程返回另一个过程作为结果。

习题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))




118397.html

dennis 2007-05-18 15:58 发表评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值