Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 如何调用到目前为止在lazyseq构造中生成的lazyseq?_Recursion_Clojure_Primes_Lazy Evaluation - Fatal编程技术网

Recursion 如何调用到目前为止在lazyseq构造中生成的lazyseq?

Recursion 如何调用到目前为止在lazyseq构造中生成的lazyseq?,recursion,clojure,primes,lazy-evaluation,Recursion,Clojure,Primes,Lazy Evaluation,对于我的素数lazy seq,我正在检查索引值是否可以被当前索引下的所有素数整除(prime?)。问题是,当我调用自身中的素数(primesintheshr primesline)时,它只返回初始值。在懒洋洋地构建时,有可能保持懒洋洋的seq更新吗?这似乎与lazy seq的概念背道而驰 (def primes (cons 2 (for [x (range) :let [y (-> x

对于我的素数lazy seq,我正在检查索引值是否可以被当前索引下的所有素数整除(
prime?
)。问题是,当我调用自身中的素数(
primes
inthe
shr primes
line)时,它只返回初始值。在懒洋洋地构建时,有可能保持懒洋洋的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)))

如果您正在处理Project Euler问题,我不想破坏您的练习,但以下是如何定义斐波那契序列,以便惰性序列在运行时不断“更新”自身:

(defn fib-maker
  ([] (concat [0 1] (fib 0 1)))
  ([a b] (lazy-seq (cons b (fib b (+ a b))))))

(def fib (fib-maker))

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

我不确定您在这里要问什么,代码似乎运行正常,并且在您的算法中只有一个素数值。这就是问题所在。如果将最后一行中的输出
y
替换为
primes
,则会看到
primes
被固定在初始值,并且没有按原样更新。