powtórzyć coś 3 razy, zanim rzucisz wyjątek - w clojure
Nie wiem, jak zaimplementować ten fragment kodu Pythona w Clojure
for i in range(3):
try:
......
except e:
if i == 2:
raise e
else:
continue
else:
break
Zastanawiam się, dlaczego coś tak prostego w Pythonie jest tak trudnego w Clojure. Myślę, że trudność polega na tym, że Clojure jest funkcjonalnym językiem programowania, a zatem nie nadaje się do takiego imperatywnego zadania. To jest moja próba:
(first
(remove #(instance? Exception %)
(for [i (range 3)]
(try (......)
(catch Exception e
(if (== i 2)
(throw e)
e)))))))
Jest bardzo brzydki, a co gorsza, nie działa zgodnie z oczekiwaniami. Pętla for jest w rzeczywistości oceniana w pełni zamiast leniwie (zdałem sobie z tego sprawę, gdy umieściłem println w środku).
Jeśli ktoś ma lepszy pomysł na wdrożenie tego, proszę mnie oświecić.