此 Clojure 代码输出 32,而我预期为 100。为什么会这样?用计数器做循环有什么好方法?
(def t 0)
(for [i (range 100)]
(def t (+ 1 t))
)
(println t)
最佳答案
for
计算为惰性序列。由于称为分块的东西,您在这里很幸运,for
被分块到 32 元素惰性分区中。
您问题中的代码非常不合惯用。
在你的情况下,你可以调用 (println 100)
如果你想循环一个序列以获得一些副作用,那么你可以使用 doseq
(doseq [i (range 100)]
(println i))
;; or
(dotimes [i 100]
(println i))
关于loops - 为什么 Clojure 的范围只迭代 32 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594009/