Given the following recursive definition of sum:
(define (sum term a next b) (if (> a b) 0 (+ (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)
result
(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))
1 Answer 1
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– jaresty2011年03月30日 02:51:02 +00:00Commented Mar 30, 2011 at 2:51
-
\$\begingroup\$ @Joshua: Haha okay, just checking. :) \$\endgroup\$user541686– user5416862011年03月30日 02:57:29 +00:00Commented Mar 30, 2011 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– jaresty2011年03月30日 03:22:44 +00:00Commented Mar 30, 2011 at 3:22