到目前为止,在构造lazy-seq的过程中如何称呼lazy-seq?

| 对于我的质数lazy seq,我正在检查索引值是否可被当前索引(
prime?
)以下的所有素数整除。问题是,当我在自身内部调用素数时(
shr-primes
行中的
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)))
    
已邀请:
        如果您正在处理Euler项目问题​​,我不想为您破坏本练习,但是这里是您如何定义斐波那契数列的方法,以便lazy-seq本身将“更新”为它会:
(defn fib-maker
  ([] (concat [0 1] (fib 0 1)))
  ([a b] (lazy-seq (cons b (fib b (+ a b))))))

(def fib (fib-maker))
我已经使用上述方法来实现您上面概述的素数序列,因此,如果您需要更多详细信息,请告诉我。同时,这将有望成为有用的提示。     

要回复问题请先登录注册