Почему Clojure не выполняет эту функцию вообще?

2 ответа

функция отображения фактически не запускает отображаемую функцию для каждого члена коллекции. скорее он возвращает ячейку «ленивых». это очень похоже на ваш классический односвязный список с одним очень важным отличием: данные в каждой ячейке вычисляются в то время, когда они читаются, а не в то время, когда они определены (этот результат, конечно, сохраняется для позже прочитает). Итак, чтобы функция действительно работала, вы должны прочитать результат выполнения функции. Потому что в этом случае вам не важен результат функции, только то, что она запустила, clojure предоставляет отличную функцию-оболочку с именем

(dorun .... insert your map here .... )

, которая создаст карту, прочитает результаты и быстро выбросит их, не тратя впустую память, сохраняя их на будущее.

Если вы сопоставляете функцию с результатами, которые хотите сохранить, используйте вместо этого Doseq.

5
ответ дан 6 December 2019 в 21:17
поделиться

map is lazy. Nothing is going to be evaluated until you force it to be evaluated. Either (dorun (action)) or use doseq instead of map.

7
ответ дан 6 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: