我想我现在明白了这里发生了什么
(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 在这里做对了