Должен ли я использовать
(apply + (filter prime? (range 1 20)))
или
(reduce + (filter prime? (range 1 20)))
Изменить: это источник для простого в clojure из оптимизирующего инструментария.
(defn prime? [n]
(cond
(or (= n 2) (= n 3)) true
(or (divisible? n 2) (< n 2)) false
:else
(let [sqrt-n (Math/sqrt n)]
(loop [i 3]
(cond
(divisible? n i) false
(< sqrt-n i) true
:else (recur (+ i 2)))))))