sicp-ex-1.31


a.

   (define (product term a next b) 
     (if (> a b) 1 
        (* (term a) (product term (next a) next b)))) 

factorial function, in terms of product function above, can be written as below.

  
 (define (identity x) x) 
  
 (define (next x) (+ x 1)) 
  
 (define (factorial n) 
 (product identity 1 next n)) 

approximations to pi using john wallis' formula, can be found by defining a new term to be used by product function as below

 (define (pi-term n) 
   (if (even? n) 
       (/ (+ n 2) (+ n 1)) 
       (/ (+ n 1) (+ n 2)))) 

And it can be used as follows.

 (* (product pi-term 1 next 6) 4)   ;;= 3.3436734693877552 
 (* (product pi-term 1 next 100) 4) ;;= 3.1570301764551676 

b.

  (define (product term a next b) 
   (define (iter a res) 
     (if (> a b) res 
          (iter (next a) (* (term a) res)))) 
    (iter a 1)) 

<< Previous exercise (1.30) | sicp-solutions | Next exercise (1.32) >>