将sum过程变成线性迭代
(define (sum term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (+ result (term a)))))
(iter a 0))
完整的代码如下:
#lang racket
(define (sum term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (+ result (term a)))))
(iter a 0))
(define (inc n) (+ n 1))
(define (cube n) (* n n n))
(define (simpson-inregral f a b n)
(let ((h (/ (- b a) n)))
(define (simpson-term k)
(* (cond ((or (= k 0) (= k n)) 1)
((even? k) 2 )
(else 4 )) (f (+ a (* k h)))))
(if (odd? n) (simpson-inregral f a b (+ n 1)) (/ (* (sum simpson-term 0 inc n) h) 3.0))))
(simpson-inregral cube 0 1 1000)
(simpson-inregral cube 0 1 10)
运行结果
0.25
0.25