(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)
Supponevo che stavo solo incredibilmente denso. Ma no, si scopre che Clojure valuta effettivamente i primi 32 elementi di ogni sequenza pigra (se disponibile). Ahia.È "per" non effettivamente pigro in clojure?
Ho avuto un for
con una chiamata ricorsiva nel :let
. Ero molto curioso sul motivo per cui il computo sembrava procedere in prima battuta piuttosto che in prima approssimazione. Sembra che il calcolo (anche se, per essere onesto, non memoria) stava esplodendo mentre continuavo a scendere tutti i rami superiori dell'albero ricorsivo. Il 32-Chunking di Clojure stava forzando la prima valutazione di ampiezza, anche se l'intento logico del codice era prima la profondità.
In ogni caso, c'è un modo semplice per forzare 1-chunking piuttosto che 32-chunking di sequenze pigre?
Grazie! Questo mi ha lasciato per due ore. Non sono riuscito a capire perché (prendi 1 (map-func [1 2 3 4])) valuta some-func per tutti i 4 elementi ... Devo dire, non era ovvio perché ciò stava accadendo, dalla lettura dei documenti su "mappa" e "prendere" –