Writing a product() function analogous to sum
Since your definitions have only two cond clauses, you may replace cond with if.  Your iterative definition is a departure from the example of sum.  It should return 1 (product identity) when a is greater than b, not null.  This makes the outer cond unnecessary.

Your definition of compute-pi suffers from imprecision of float operations (it fails to produce meaningful values for n > 85).  It would be better to convert to float after computing the approximating fraction.

(define (product term a next b)
  (if (&gt; a b)
      1
      (* (term a) (product term (next a) next b))))

(define (i-product term a next b)
  (define (iter a result)
    (if (&gt; a b)
        result
        (iter (next a) (* (term a) result))))
  (iter a 1))

(define (compute-pi steps)
  (define (next n) (+ n 2))
  (* 8.0 (* steps 2) (/ (i-product square 4 next (* (- steps 1) 2)) 
                        (i-product square 3 next (* steps 2)))))