(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)
Supuse que estaba siendo extraordinariamente densa. Pero no, resulta que Clojure realmente evalúa los primeros 32 elementos de cualquier secuencia floja (si está disponible). Ay.¿Es 'para' no realmente perezoso en clojure?
Tuve un for
con una llamada recursiva en el :let
. Tenía mucha curiosidad por saber por qué el cálculo parecía avanzar primero en lugar de profundizar primero. Parece que el cálculo (aunque, para ser justos, no la memoria) estaba explotando a medida que avanzaba por todas las ramas superiores del árbol recursivo. El 32-fragmentación de Clojure estaba forzando la primera evaluación de amplitud, aunque la intención lógica del código era la profundidad primero.
De todos modos, ¿hay alguna manera simple de forzar 1-fragmentación en lugar de 32-fragmentación de secuencias perezosas?
¡Gracias! Esto me tuvo perplejo por dos horas. No pude entender por qué (tomar 1 (mapa alguno-func [1 2 3 4])) evalúa algún func para los 4 elementos ... Debo decir que no era obvio por qué sucedía eso, de leer los documentos en "mapa" y "tomar" –