【发布时间】:2011-09-14 01:15:37
【问题描述】:
对于我的素数惰性序列,我正在检查索引值是否可以被当前索引以下的所有素数整除 (prime?)。问题是,当我在自身内部调用素数(shr-primes 行内的primes)时,它只返回初始值。是否可以在惰性构建时保持惰性序列更新?这似乎与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)))
【问题讨论】:
-
我不确定你在这里问什么,代码似乎可以运行,并且你的算法中只有一个质数值。
-
这就是问题所在。如果您将最后一行中的输出
y替换为primes,那么您将看到primes停留在初始值并且没有按应有的方式更新。
标签: recursion clojure primes lazy-evaluation