В Clojure, это справедливо:Почему не допустима повторная цель?
(loop [a 5]
(if (= a 0)
"done"
(recur (dec a))))
Однако это не так:
(let [a 5]
(if (= a 0)
"done"
(recur (dec a))))
Вот и мне интересно: почему цикл и пусть разделены, учитывая тот факт, что они оба (по крайней мере, концептуально) внедрять лексические привязки? То есть, почему цикл повторяется, а пусть нет?
EDIT: изначально была написана «цель цикла», которая, как я заметил, неверна.
Хорошо, я вижу вашу точку зрения. Однако почему тогда не повторяется дополнительный аргумент arg, указывающий, к какой цели нужно перейти? Или это слишком сильно пойдет в сторону goto's (и мы все знаем, что сказал Дейкстра о gotos)? – jjpe
@jjpe let не является повторной целью, потому что цикл есть. Если let был повторной целью, цикл не существовал бы. цикл точно такой же, как let, за исключением того, что он также действует как цель повтора. См. Http://clojure.org/special_forms#loop –