1.33 Exercise 1.33

(define (filtered-accumulate predicate combiner null-value term a next b)
  (define (iter a result)
    (cond ((> a b) result)
          ((predicate a)
           (iter (next a) (combiner result (term a))))
          (else
           (iter (next a) result))))
  (iter a null-value))
(define (sum-of-primes a b)
  (filtered-accumulate prime? + 0 identity a inc b))
(define (product-of-relatively-prime n)
  (define (is-relatively-prime? i)
    (= 1 (gcd i n)))
  (filtered-accumulate is-relatively-prime? * 1 identity 1 inc (- n 1)))