SICP学习笔记:用高阶函数作抽象(1)

我们可以通过定义一个通用的sum来进行求和.传入过程作为参数

练习1.29,利用辛普森法则进行积分求和,需要注意的一点是闭包的性质,在integral里面的参数都是可以直接用在里面的闭包里面的.

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

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

(define (integral f a b n) (define h (/ (- b a) n)) (define (simp_next k) (+ k 1)) (define (factor k) (cond ((or (= k 0) (= k n)) 1) ((odd? k) 4) (else 2))) (define (term k) (* (factor k) (f (+ a (* k h))))) (if (not (even? n)) (error "n can't be odd") (* (/ h 3) (sum term 0.0 simp_next n))) )                     

1.30,将sum改成迭代执行的形式:

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

你可能感兴趣的:(SICP学习笔记:用高阶函数作抽象(1))