Я хочу многократно применять некоторую функцию к некоторому состоянию, пока условие не будет выполнено.
Функция f принимает состояние, изменяет его и возвращает его.Снова примените f к возвращенному состоянию и т. Д.
Я думаю, что это сработает.
(first (filter pred (iterate f x)))
Но это немного уродливо.Кроме того, потребление памяти не является идеальным, поскольку итератор будет вынужден оценивать и сохранять промежуточные состояния до тех пор, пока не будет возвращено состояние, в котором сохраняется pred, и в этот момент промежуточные состояния следует собирать мусором.
Я знаю, что вы можете написать простую рекурсивную функцию:
(loop [f x p] (if (p x) x (recur f (f x) p))
Но я ищу функцию библиотеки ядра (или некоторую комбинацию функций), которая делает то же самое с тем жеэффективность памяти.