对于我的素数lazy seq,我正在检查索引值是否可以被当前索引(prime?
)下面的所有素数整除。问题是,当我在其自身内调用素数(primes
行内shr-primes
)时,它只返回初始值。是否可以在懒惰地构建它时保持lazy-seq更新?这似乎与lazy-seq概念相反。
(def primes
(cons 2 (for [x (range)
:let [y (-> x (* 2) (+ 3))
root (math/floor (math/sqrt y))
shr-primes (take-while (partial >= root) primes) ;; primes stuck at init value
prime? (every? #(not= % 0) (pmap #(rem y %) shr-primes))]
:when prime?]
y)))
答案 0 :(得分:2)
如果你正在处理Project Euler问题,我不想破坏你的练习,但是这里你将如何定义一个斐波那契序列,以便lazy-seq保持“更新”它自己:< / p>
(defn fib-maker
([] (concat [0 1] (fib 0 1)))
([a b] (lazy-seq (cons b (fib b (+ a b))))))
(def fib (fib-maker))
我已经使用上述方法来实现您在上面概述的素数序列,因此如果您想了解更多详细信息,请告知我们。同时,这有望成为一个有用的暗示。