-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path007alt.clj
More file actions
21 lines (19 loc) · 711 Bytes
/
007alt.clj
File metadata and controls
21 lines (19 loc) · 711 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
; lazy prime generator - very useful
(defn lazy-primes []
(letfn [(enqueue [sieve n step]
(let [m (+ n step)]
(if (sieve m)
(recur sieve m step)
(assoc sieve m step))))
(next-sieve [sieve n]
(if-let [step (sieve n)]
(-> sieve
(dissoc n)
(enqueue n step))
(enqueue sieve n (+ n n))))
(next-primes [sieve n]
(if (sieve n)
(recur (next-sieve sieve n) (+ n 2))
(cons n (lazy-seq (next-primes (next-sieve sieve n) (+ n 2))))))]
(cons 2 (lazy-seq (next-primes {} 3)))))
(time (println (nth (lazy-primes) 1000000)))