повторить попытку 3 раза, прежде чем выдать исключение - в ближайшем будущем

Я не знаю, как реализовать этот кусок кода Python в Clojure

for i in range(3):
    try:
        ......
    except e:
        if i == 2:
            raise e
        else:
            continue
    else:
        break

Интересно, почему что-то такое простое в Python так сложно в Clojure. Я думаю, что трудность заключается в том, что Clojure является функциональным языком программирования и поэтому не подходит для такой неотложной задачи. Это моя попытка:

(first
  (remove #(instance? Exception %)
    (for [i (range 3)]
      (try (......)
              (catch Exception e
                (if (== i 2) 
                  (throw e)
                  e)))))))

Это очень некрасиво и, что еще хуже, не работает так, как ожидалось. Цикл for фактически выполняется полностью, а не лениво (я понял это, вставив println внутрь).

Если у кого-то есть идея лучше реализовать это, пожалуйста, просветите меня.

Ответы на вопрос(4)

Ваш ответ на вопрос