loops - 为什么 Clojure 的范围只迭代 32 次?

标签 loops for-loop clojure range

此 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/

相关文章:

Clojure:懒惰的魔法

clojure - 如何过滤递增向量中递减的元素?

arrays - for 循环中的协议(protocol)一致性检查?

javascript - JQuery 等待 Ajax 响应

javascript - 如何在没有 forEach 的情况下迭代 Javascript Map?

windows - 批处理文件在for循环中获取开始和结束字符

r - 加快独特观测值的成对计数

python - Django - 'for' 语句应该至少有四个字 : for choice question_set. all

clojure - 从环中获取URL参数

c - 打印出用户选择的两个不同年份之间的天数的程序有困难