(take 2 (for [x (range 10)
:let [_ (println x)]
:when (even? x)] x))
>> (* 0
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
0 2)
我以为我只是非常密集。但是,不,事实证明,Clojure实际上评估了任何惰性序列的前32个元素(如果可用)。哎哟。是不是真的懒惰在clojure?
我有一个for
递归调用:let
。我很好奇为什么计算似乎是先在广度上进行,而不是深度优先。看起来,计算(尽管公平,而不是记忆)正在爆炸,因为我一直沿着递归树的所有上层分支进行下去。尽管代码的逻辑意图是深度优先,但Clojure的32分组迫使广度优先评估。
无论如何,有没有简单的方法来强制1分块而不是32分块的懒序列?
谢谢!这让我陷入了两个小时。我想不通为什么 (拿1(map some-func [1 2 3 4])) 评估所有4个元素的some-func ...我必须说,这并不是明显的原因,从阅读“地图”和“采取”文档 –