Was ist der praktische Zweck der dynamischen Vars und Bindung von Clojure?

Ich habe mir die Referenzen angesehen:http://clojure.org/vars#Vars%20and%20the%20Global%20Environment, http://clojuredocs.org/clojure_core/clojure.core/binding

ebenso gut wieclojure und ^: dynamic undClojure Dynamic Binding

Ich verstehe immer noch nicht, warum es notwendig istbinding überhaupt, da jedes Programm, das ich geschrieben habe, ohne sie war und ich Wege finden kann, die Beispiele auf herkömmliche Weise zu schreiben - was ich verständlicher finde. Gibt es Beispiele für Projekte / Programmierparadigmen, die davon Gebrauch machen?

Zum Beispiel ... im Beispiel "Tier sprechen" können Sie einen ähnlichen Effekt erzielen mit:

(def dog {:name "Dog" :sound "Woof"})
(def cat {:name "Cat" :sound "Meow"})

(defn speak [animal]
   (str (:name animal) " says " (:sound animal))

(println (speak dog))
(println (speak cat))

Keine Makros, keine dynamische Bindung ... immer noch sehr sauber.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage