Цикл while обычно включает в себя изменяемые переменные, то есть ожидание, пока переменная не удовлетворяет определенному условию; в Clojure вы обычно используете хвостовую рекурсию (которую компилятор преобразует в цикл while)
Следующее не совсем решение, но этот вариант цикла for может быть полезен в некоторых случаях:
(for [a (range 100)
b (range 100)
:while (< (* a b) 1000)]
[a b]
)
Это создаст список всех пар a и b до (< (* a b) 1000)
. То есть он остановится, как только условие будет выполнено. Если вы замените: while на: when, вы можете найти всех пар, которые удовлетворяют условию, даже после того, как он найдет ту, которая не соответствует.