(define (accumulate combiner null-value term a next b)
(if (> a b)
null-value
(combiner (term a )
(accumulate combiner null-value term (next a) next b)
)
)
)
(define (accumulate-iter combiner null-value term a next b)
(define (iter null-value a b)
(if (> a b)
null-value
(iter (combiner null-value (term a)) (next a) b)
)
)
(iter null-value a b)
)
(define (inc n) (+ n 1))
(define (cube a) (* a a a))
(define (sum term a next b)
(accumulate + 0 term a next b)
)
(define (sum-iter term a next b)
(accumulate-iter + 0 term a next b)
)
(define (sum-cubes a b)
(sum cube a inc b)
)
(define (sum-cubes-iter a b)
(sum-iter cube a inc b)
)
(sum-cubes 1 10)
(sum-cubes-iter 1 10)
(define (filtered-accumulate combainer filter? null-value term a next b) (if (> a b) null-value (if (filter? a) (combainer (term a) (filtered-accumulate combainer filter? null-value term (next a) next b)) (filtered-accumulate combainer filter? null-value term (next a) next b) ) ) )
(define (isok a) (= a a))
(define (sum-filtered-accumulate term a next b) (filtered-accumulate + isok 0 term a next b) )
(define (sum-filtered-accumulate-cubes a b) (sum-filtered-accumulate cube a inc b) ) (sum-filtered-accumulate-cubes 1 10)