1.32|

$ cd ~

SICP Exercise 1.32

Defining accumulator:

(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)))))

Using the above definition for building sum and product:

(define (sum term a next b)
  (accumulate + 0 term a next b)) 
  
(define (product term a next b)
  (accumulate * 1 term a next b)) 

And changing accumulator to be iterative:

(define (accumulate combiner null-value term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (combiner (result
                                  (term a))))))
  (iter a null-value))