Ответ 1
Просто замените for
на doseq
, и вы все настроены. Не используйте map
, который так же ленив, как for
.
Реализация цикла for в clojure кажется легким, но как я могу реализовать оператор foreach, который читает каждый элемент в списке (вектор) и что-то делает?
как это...
(foreach i list expression)
Спасибо заранее!
Просто замените for
на doseq
, и вы все настроены. Не используйте map
, который так же ленив, как for
.
map
является функциональным эквивалентом foreach
, тогда как doseq
является обязательным программированием с побочными эффектами.
map
принимает функцию f
и коллекцию seqable coll
и возвращает лениво оцениваемый результат применения f
к каждому элементу коллекции.
(map inc [1 2 3 4])
=> (2 3 4 5)
(map (fn [x] (* x 2)) [1 2 3 4])
=> (2 4 6 8)
(map dec (take 5 (range)))
=> (-1 0 1 2 3)