What is the Clojure equivalent (for the exact algorithm) of the following Python code?
from itertools import count
from math import sqrt
primes = 
for n in count(2):
if all(n%p for p in primes if p <= sqrt(n)):
This is as Pythonish as I can make it:
(def prime-gen (let [primes (atom )] (for [n (iterate inc 2) :when (not-any? #(zero? (rem n %)) (filter #(<= % (Math/sqrt n)) @primes))] (do (swap! primes conj n) n)))) (take 10 prime-gen) ; => (2 3 5 7 11 13 17 19 23 29)
Clojure doesn't consider the integer 0 to be boolean false. It took me a few minutes to figure out that your Python code was taking advantage of this.
Here are some other prime number algorithms in Clojure. There's also a prime number implementation in