функция отображения фактически не запускает отображаемую функцию для каждого члена коллекции. скорее он возвращает ячейку «ленивых». это очень похоже на ваш классический односвязный список с одним очень важным отличием: данные в каждой ячейке вычисляются в то время, когда они читаются, а не в то время, когда они определены (этот результат, конечно, сохраняется для позже прочитает). Итак, чтобы функция действительно работала, вы должны прочитать результат выполнения функции. Потому что в этом случае вам не важен результат функции, только то, что она запустила, clojure предоставляет отличную функцию-оболочку с именем
(dorun .... insert your map here .... )
, которая создаст карту, прочитает результаты и быстро выбросит их, не тратя впустую память, сохраняя их на будущее.
Если вы сопоставляете функцию с результатами, которые хотите сохранить, используйте вместо этого Doseq.
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
.