(define (accumulate filter? combiner null-value term a next b)
(cond ((> a b) null-value)
((filter? a) (combiner (term a)
(accumulate filter? combiner null-value term (next a) next b)))
(else (accumulate filter? combiner null-value term (next a) next b))))
;以下部分是filter?的实现部分
(define (prime? n)
(define (fermat-test times)
(cond ((= times 0) true)
((try-it (random n)) (fermat-test (- times 1)))
(else false)))
(define (try-it a)
(cond ((= (expmod a n) a) true)
(else false)))
(define (square x)
(* x x))
(define (expmod base exp)
(cond ((= exp 0) 1)
((= (remainder exp 2) 0)
(remainder (square (expmod base (/ exp 2))) n))
(else
(remainder (* base (remainder (expmod base (- exp 1)) n)) n))))
(cond ((fermat-test 5) true)
(else false)))
(define (gcd m n)
(cond ((= n 0) m)
(else (gcd n (remainder m n)))))