(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 ...我必須說,這並不是明顯的原因,從閱讀「地圖」和「採取」文檔 –