1 665c255d 2023-08-04 jrmu ;; 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:
3 665c255d 2023-08-04 jrmu (define (product term a next b)
7 665c255d 2023-08-04 jrmu (product term (next a) next b))))
9 665c255d 2023-08-04 jrmu (define (product-iter term a next b)
10 665c255d 2023-08-04 jrmu (define (iter i result)
13 665c255d 2023-08-04 jrmu (iter (next i) (* (term i) result))))
16 665c255d 2023-08-04 jrmu (define (factorial n)
17 665c255d 2023-08-04 jrmu (product (lambda (x) x)
19 665c255d 2023-08-04 jrmu (lambda (x) (+ x 1))
22 665c255d 2023-08-04 jrmu (define (factorial-iter n)
23 665c255d 2023-08-04 jrmu (product-iter (lambda (x) x)
25 665c255d 2023-08-04 jrmu (lambda (x) (+ x 1))
28 665c255d 2023-08-04 jrmu ;; pi/4 = 2*4*4*6*6*8*...
29 665c255d 2023-08-04 jrmu ;; ---------------
30 665c255d 2023-08-04 jrmu ;; 3*3*5*5*7*7*...
32 665c255d 2023-08-04 jrmu (define (pi iterations)
34 665c255d 2023-08-04 jrmu (product (lambda (x)
35 665c255d 2023-08-04 jrmu (if (odd? x)
36 665c255d 2023-08-04 jrmu (/ (+ x 1) (+ x 2))
37 665c255d 2023-08-04 jrmu (/ (+ x 2) (+ x 1))))
39 665c255d 2023-08-04 jrmu (lambda (x) (+ x 1))
40 665c255d 2023-08-04 jrmu iterations)))
42 665c255d 2023-08-04 jrmu (define (test-case actual expected)
43 665c255d 2023-08-04 jrmu (load-option 'format)
45 665c255d 2023-08-04 jrmu (format #t "Actual: ~A Expected: ~A" actual expected))
47 665c255d 2023-08-04 jrmu (test-case (factorial 0) 1)
48 665c255d 2023-08-04 jrmu (test-case (factorial 1) 1)
49 665c255d 2023-08-04 jrmu (test-case (factorial 2) 2)
50 665c255d 2023-08-04 jrmu (test-case (factorial 3) 6)
51 665c255d 2023-08-04 jrmu (test-case (factorial 4) 24)
52 665c255d 2023-08-04 jrmu (test-case (factorial 5) 120)
53 665c255d 2023-08-04 jrmu (test-case (factorial 6) 720)
54 665c255d 2023-08-04 jrmu (test-case (factorial 7) 5040)
55 665c255d 2023-08-04 jrmu (test-case (factorial-iter 7) 5040)
57 665c255d 2023-08-04 jrmu (test-case (pi 10000) 3.1415)