(define (filtered-accumulate combiner null-value term a filter next b) (define (iter a result) (cond ((> a b) result) ((filter a) (iter (next a) (combiner result (term a)))) (else (iter (next a) result)))) (iter a null-value)) ; a. ; express the sum of squares of primes between a and b using filter-accum (define (sum-of-squares-of-primes-between a b) (filtered-accumulate + 0 square a prime? inc b)) ; b. ; express the sum of positive integers less than, and relatively prime to, n (define (relatively-prime? m n) (= (gcd m n) 1)) (define (id x) x) (define (sum-of-relatively-prime-predecessors n) (define (rel-prime-to-n? m) (relatively-prime? m n)) (filtered-accumulate + 0 id 1 rel-prime-to-n? inc b))