3
對於我的素數懶惰seq,我檢查是否索引值可以被當前索引(prime?
)以下的所有素數整除。問題是,當我自己調用素數時(primes
在shr-primes
行內),它只返回初始值。是否有可能在延遲構建時更新lazy-seq?懶惰seq概念似乎是反直覺的。如何調用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)))
我不確定你在問什麼,代碼似乎起作用,並且算法中只有一個素數值。 – 2011-06-13 16:51:56
這就是問題所在。如果用'primes'替換最後一行中的輸出'y',那麼你會看到'primes'被卡住了初始值,並沒有像原來那樣更新。 – 2011-06-13 18:35:57