Идиоматический эквивалент может быть:
(doall (map do-something a b))
... или, как расширенная версия того, что вы все еще пишете свой собственный цикл:
(doseq [[i j] (map vector a b)]
(do-something i j))
- Поскольку
for
является ленивым, он может на самом деле не оценить всю вашу последовательность, если что-то не потребляет ее результат;doseq
всегда вызывает do-something
для всего. map somefunc arg1 arg2
вызывает somefunc
с каждым набором значений в arg1
и arg2
, именно то, что вы ищете здесь.
Более прямой перевод может выглядеть так:
(doseq [i (range (count a))]
(do-something (nth a i) (nth b i)))
... но не используйте его;count
и nth
могут быть медленными или недоступными, в зависимости от используемых типов коллекции.