repetindo algo 3 vezes antes de lançar uma exceção - em clojure
Eu não sei como implementar este pedaço de código Python no Clojure
for i in range(3):
try:
......
except e:
if i == 2:
raise e
else:
continue
else:
break
Eu me pergunto por que algo tão simples no Python é tão difícil no Clojure. Eu acho que a dificuldade é porque o Clojure é uma linguagem de programação funcional e, portanto, não é adequado para uma tarefa tão imperativa. Esta é minha tentativa:
(first
(remove #(instance? Exception %)
(for [i (range 3)]
(try (......)
(catch Exception e
(if (== i 2)
(throw e)
e)))))))
É muito feio e, pior, não funciona como esperado. O loop for realmente é avaliado completamente em vez de preguiçosamente (percebi isso quando coloquei um println dentro).
Se alguém tiver uma ideia melhor para implementar isso, por favor me esclareça.