In clojure gilt dies:Warum ist kein gültiges wiederkehrendes Ziel?
(loop [a 5]
(if (= a 0)
"done"
(recur (dec a))))
Dies ist jedoch nicht:
(let [a 5]
(if (= a 0)
"done"
(recur (dec a))))
Also ich frage mich: warum Schleife sind und lassen getrennt, angesichts der Tatsache, dass sie beide (zumindest konzeptionell) lexikalische Bindungen einführen? Das heißt, warum ist Schleife ein wiederkehrendes Ziel, während nicht?
EDIT: ursprünglich geschrieben "Loop-Ziel", die ich bemerkte, ist falsch.
Ok, ich verstehe Ihren Standpunkt. Warum, warum dann nicht wiederholen, haben eine zusätzliche optionale Arg, die angibt, welches Ziel zu springen? Oder würde das zu sehr in Richtung Goto gehen (und wir alle wissen, was Dijkstra über Gotos gesagt hat)? – jjpe
@jjpe Let ist kein wiederkehrendes Ziel, weil Schleife ist. Wenn let ein wiederkehrendes Ziel wäre, würde loop nicht existieren. Schleife ist genau das Gleiche wie lassen, außer dass es auch als ein wiederkehrendes Ziel fungiert. Siehe http://clojure.org/special_forms#loop –