Blob


1 (defun filtered-accumulator (combiner null-value term a next b filter)
2 (cond ((> a b) null-value)
3 ((funcall filter a)
4 (funcall combiner
5 (funcall term a)
6 (filtered-accumulator combiner null-value term (funcall next a) next b filter)))
7 (t (filtered-accumulator combiner null-value term (funcall next a) next b filter))))
8 (defun sum-squares-of-primes (a b)
9 (filtered-accumulator #'+ 0 #'square a #'1+ b #'prime?))
10 (defun product-of-relatively-prime (n)
11 (defun relatively-prime-to-n? (k)
12 (= (gcd k n) 1))
13 (filtered-accumulator #'* 1 #'identity 1 #'1+ (1- n) #'relatively-prime-to-n?))