首页 > 其他 > 详细

SICP 1.29 1.30

时间:2014-08-22 00:27:35      阅读:288      评论:0      收藏:0      [点我收藏+]

解:代码如下

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a) (sum term (next a) next b))))

(define (add-1 x)
  (+ x 1))

(define (sum-iter term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (+ result (term a)))))
  (iter a 0))

(define (integral f a b n)
  (define h (/ (- b a) (* 1.0 n)))
  (define (function-y k)
    (f (+ a (* k h))))
  (define (term k)
    (define y (function-y k))
    (cond ((= k 0) y)
          ((= k n) y)
          ((even? k) (* 2 y))
          (else (* 4 y))))
  (* (/ h 3) (sum-iter term 0 add-1 n)))

(define (cube x)
  (* x x x))

1.29的难点是找出状态转移变量,也就是k;要注意的时k=0和k=n时,y函数前面是没有2或4的。

当n=1000时,用sum求出的是0.25000000000000003,而用sum-iter求出的是0.25000000000000006,用DrRacket,不知道为什么。

SICP 1.29 1.30,布布扣,bubuko.com

SICP 1.29 1.30

原文:http://my.oschina.net/u/1445655/blog/305375

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!