Один из способов перевести обязательный цикл в Clojure - использовать макрос for
.
(for [i (range 10)] (inc i))
Вышеприведенная функция вернет все числа от 0 до 9, увеличенные на 1. Однако, похоже, вы просто хотите перебрать последовательную коллекцию и использовать каждый элемент. Если это все, что вам нужно, вам не нужно ссылаться на значение индекса, вместо этого вы можете ссылаться на каждый элемент напрямую.
(for [d my-vec-of-data] (my-function d))
Однако, для этого простого случая, функция map
, вероятно, будет лучшим выбором, потому что она предназначена для вызова функций с аргументами из коллекций. Следующий пример эквивалентен использованию for
выше.
(map my-function my-vec-of-data)
И map
, и for
возвращают коллекцию значений, составленную из значений, возвращаемых my-function
. Это потому, что структуры данных Clojure неизменны, поэтому необходимо вернуть новую коллекцию. Если это не то, что вам нужно, или если ваша функция имеет побочные эффекты, вы можете использовать doseq
вместо for
, что возвращает nil
.