以下Python代码的Clojure等价物(对于精确算法)是什么?
from itertools import count
from math import sqrt
def prime_gen():
primes = []
for n in count(2):
if all(n%p for p in primes if p <= sqrt(n)):
primes.append(n)
yield n
Run Code Online (Sandbox Code Playgroud)
Bri*_*per 11
这是我所能做的Pythonish:
(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)
Run Code Online (Sandbox Code Playgroud)
Clojure不认为整数0是布尔值false.我花了几分钟才发现你的Python代码正在利用这一点.
以下是Clojure中的一些其他素数算法.还有一个素数实现clojure.contrib.lazy-seqs
.
归档时间: |
|
查看次数: |
2868 次 |
最近记录: |