rendered paste body(require (planet "trace.ss" ("untyped" "unlib.plt" 2 1)))
(define (cube x) (* x x x))
(define-traced (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
(define (inc1 n) (+ n 1))
(define (inc2 n) (+ n 2))
(define (simpson f a b n)
(let* ((h (/ (- b a) n))
(term (lambda-traced (k) (f (+ a (* k h))))))
(* (/ h 3.0)
(+ (sum term 0 inc1 n)
(sum term 1 inc1 (- n 1))
(* 2.0 (sum term 1 inc2 (- n 1)))))))
(simpson cube 0.0 1.0 10)
> (sum #<procedure:term> 0 #<procedure:inc1> 10)
D,"Entering traced lambda",(0)
D,"Leaving traced lambda",0.0
> (sum #<procedure:term> 1 #<procedure:inc1> 10)
D,"Entering traced lambda",(1)
D,"Leaving traced lambda",0.0010000000000000002
> (sum #<procedure:term> 2 #<procedure:inc1> 10)
D,"Entering traced lambda",(2)
D,"Leaving traced lambda",0.008000000000000002
> (sum #<procedure:term> 3 #<procedure:inc1> 10)
D,"Entering traced lambda",(3)
D,"Leaving traced lambda",0.02700000000000001
> (sum #<procedure:term> 4 #<procedure:inc1> 10)
D,"Entering traced lambda",(4)
D,"Leaving traced lambda",0.06400000000000002
> (sum #<procedure:term> 5 #<procedure:inc1> 10)
D,"Entering traced lambda",(5)
D,"Leaving traced lambda",0.125
> (sum #<procedure:term> 6 #<procedure:inc1> 10)
D,"Entering traced lambda",(6)
D,"Leaving traced lambda",0.21600000000000008
> (sum #<procedure:term> 7 #<procedure:inc1> 10)
D,"Entering traced lambda",(7)
D,"Leaving traced lambda",0.3430000000000001
> (sum #<procedure:term> 8 #<procedure:inc1> 10)
D,"Entering traced lambda",(8)
D,"Leaving traced lambda",0.5120000000000001
> (sum #<procedure:term> 9 #<procedure:inc1> 10)
D,"Entering traced lambda",(9)
D,"Leaving traced lambda",0.7290000000000001
> (sum #<procedure:term> 10 #<procedure:inc1> 10)
D,"Entering traced lambda",(10)
D,"Leaving traced lambda",1.0
> (sum #<procedure:term> 11 #<procedure:inc1> 10)
< (sum #<procedure:term> 11 #<procedure:inc1> 10)
< (sum #<procedure:term> 10 #<procedure:inc1> 10)
< (sum #<procedure:term> 9 #<procedure:inc1> 10)
< (sum #<procedure:term> 8 #<procedure:inc1> 10)
< (sum #<procedure:term> 7 #<procedure:inc1> 10)
< (sum #<procedure:term> 6 #<procedure:inc1> 10)
< (sum #<procedure:term> 5 #<procedure:inc1> 10)
< (sum #<procedure:term> 4 #<procedure:inc1> 10)
< (sum #<procedure:term> 3 #<procedure:inc1> 10)
< (sum #<procedure:term> 2 #<procedure:inc1> 10)
< (sum #<procedure:term> 1 #<procedure:inc1> 10)
< (sum #<procedure:term> 0 #<procedure:inc1> 10)
> (sum #<procedure:term> 1 #<procedure:inc1> 9)
D,"Entering traced lambda",(1)
D,"Leaving traced lambda",0.0010000000000000002
> (sum #<procedure:term> 2 #<procedure:inc1> 9)
D,"Entering traced lambda",(2)
D,"Leaving traced lambda",0.008000000000000002
> (sum #<procedure:term> 3 #<procedure:inc1> 9)
D,"Entering traced lambda",(3)
D,"Leaving traced lambda",0.02700000000000001
> (sum #<procedure:term> 4 #<procedure:inc1> 9)
D,"Entering traced lambda",(4)
D,"Leaving traced lambda",0.06400000000000002
> (sum #<procedure:term> 5 #<procedure:inc1> 9)
D,"Entering traced lambda",(5)
D,"Leaving traced lambda",0.125
> (sum #<procedure:term> 6 #<procedure:inc1> 9)
D,"Entering traced lambda",(6)
D,"Leaving traced lambda",0.21600000000000008
> (sum #<procedure:term> 7 #<procedure:inc1> 9)
D,"Entering traced lambda",(7)
D,"Leaving traced lambda",0.3430000000000001
> (sum #<procedure:term> 8 #<procedure:inc1> 9)
D,"Entering traced lambda",(8)
D,"Leaving traced lambda",0.5120000000000001
> (sum #<procedure:term> 9 #<procedure:inc1> 9)
D,"Entering traced lambda",(9)
D,"Leaving traced lambda",0.7290000000000001
> (sum #<procedure:term> 10 #<procedure:inc1> 9)
< (sum #<procedure:term> 10 #<procedure:inc1> 9)
< (sum #<procedure:term> 9 #<procedure:inc1> 9)
< (sum #<procedure:term> 8 #<procedure:inc1> 9)
< (sum #<procedure:term> 7 #<procedure:inc1> 9)
< (sum #<procedure:term> 6 #<procedure:inc1> 9)
< (sum #<procedure:term> 5 #<procedure:inc1> 9)
< (sum #<procedure:term> 4 #<procedure:inc1> 9)
< (sum #<procedure:term> 3 #<procedure:inc1> 9)
< (sum #<procedure:term> 2 #<procedure:inc1> 9)
< (sum #<procedure:term> 1 #<procedure:inc1> 9)
> (sum #<procedure:term> 1 #<procedure:inc2> 9)
D,"Entering traced lambda",(1)
D,"Leaving traced lambda",0.0010000000000000002
> (sum #<procedure:term> 3 #<procedure:inc2> 9)
D,"Entering traced lambda",(3)
D,"Leaving traced lambda",0.02700000000000001
> (sum #<procedure:term> 5 #<procedure:inc2> 9)
D,"Entering traced lambda",(5)
D,"Leaving traced lambda",0.125
> (sum #<procedure:term> 7 #<procedure:inc2> 9)
D,"Entering traced lambda",(7)
D,"Leaving traced lambda",0.3430000000000001
> (sum #<procedure:term> 9 #<procedure:inc2> 9)
D,"Entering traced lambda",(9)
D,"Leaving traced lambda",0.7290000000000001
> (sum #<procedure:term> 11 #<procedure:inc2> 9)
< (sum #<procedure:term> 11 #<procedure:inc2> 9)
< (sum #<procedure:term> 9 #<procedure:inc2> 9)
< (sum #<procedure:term> 7 #<procedure:inc2> 9)
< (sum #<procedure:term> 5 #<procedure:inc2> 9)
< (sum #<procedure:term> 3 #<procedure:inc2> 9)
< (sum #<procedure:term> 1 #<procedure:inc2> 9)
0.25