我想我现在明白这里发生了什么。
(def cnt (atom 0))
(def cnt' (for[i (range 5)] (shift-by i)))
(println "cnt shift1 => " @cnt)
(println "cnt' => " cnt')
(println "cnt shift2 => " @cnt)
cnt'是懒的,好的
第一次打印到达了@cnt,因此不会导出懒序列的求值。
第二次打印用于cnt',并评估懒惰序列并更新@cnt
第三次打印只显示更新的@cnt
更新@cnt是评估的副作用(可能是打印或写入文件)
我认为Clojure在这里做了正确的事情