Code Review

Compare your solutions

    #| BEGIN (Write your solution here) |#
(define (filtered-accumulate combiner null-value term a next b pred)
  (define (iter a result)
    (cond ((> a b) result)
          ((pred a) (iter (next a) (combiner result (term a))))
          (else (iter (next a) result))))
  (iter a null-value))

(define (prime-squares-sum a b)
  (filtered-accumulate + 0 square a inc b prime?))

(define (relatively-prime-product n)
  (define (n-relatively-prime? i)
    (relatively-prime? i n))
  (filtered-accumulate * 1 identity 1 inc (- n 1) n-relatively-prime?))

(define (relatively-prime? i n)
  (= (gcd i n) 1))

(define (gcd a b)
  (if (= b 0)
      a
      (gcd b (remainder a b))))

(define (prime? n)
  (define (has-divisor? d)
    (cond ((> (* d d) n) #f)
          ((= (remainder n d) 0) #t)
          (else (has-divisor? (+ d 1)))))
  (cond ((< n 2) #f)
        (else (not (has-divisor? 2)))))
#| END |#