Given the following recursive definition of sum:

(define (sum term a next b)
  (if (> a b)
      (+ (term a)
         (sum term (next a) next b))))

And the task:

Exercise 1.30

The sum procedure above generates a linear recursion. The procedure can be rewritten so that the sum is performed iteratively. Show how to do this by filling in the missing expressions in the following definition:

(define (sum term a next b)
  (define (iter a result)
    (if <??>
        (iter <??> <??>)))
  (iter <??> <??>))

I wrote the following code. What do you think?

(define (i-sum term a next b)
  (define (iter a result)
    (if (> a b)
        (iter (next a) (+ result (term a)))))
  (iter a 0))

(define (identity x) x)
(define (inc x) (+ 1 x))
(define (sum-integers a b) (i-sum identity a inc b))

migrated from stackoverflow.com Mar 30 '11 at 3:11

This question came from our site for professional and enthusiast programmers.


I believe your answer is correct, although I'm not sure why you need the identity, inc, and sum-integers procedure on the bottom for your solution.

  • \$\begingroup\$ Not homework - personal growth exercise :) \$\endgroup\$ – jaresty Mar 30 '11 at 2:51
  • \$\begingroup\$ @Joshua: Haha okay, just checking. :) \$\endgroup\$ – Mehrdad Mar 30 '11 at 2:57
  • \$\begingroup\$ They're there for testing purposes - I suppose maybe I should have removed them before posting the question?...hmm \$\endgroup\$ – jaresty Mar 30 '11 at 3:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.