Jay*_*man 2 loops for-loop clojure range
这个Clojure代码输出32而我期望100.为什么会这样?使用计数器进行循环的好方法是什么?
(def t 0)
(for [i (range 100)]
(def t (+ 1 t))
)
(println t)
Run Code Online (Sandbox Code Playgroud)
for评估为懒惰序列.由于称为分块的东西,你在这里很幸运,for并被分成32个元素的懒惰分区.
您的问题中的代码非常非惯用.
在你的情况下你可以打电话 (println 100)
如果你想循环一个序列的一些副作用,那么你可以使用 doseq
(doseq [i (range 100)]
(println i))
;; or
(dotimes [i 100]
(println i))
Run Code Online (Sandbox Code Playgroud)
几点说明:
这是获得你想要的更惯用的方式:
; a more functional way
(def t (reduce + (take 100 (repeat 1))))
(println t)
; a more "stateful" approach
(def t (atom 0))
(doseq [i (range 100)]
(swap! t inc))
(println @t)
Run Code Online (Sandbox Code Playgroud)