clojure et ^:dynamique

J'ai essayé de comprendre la dynamique des variables et la fonction de liaison j'ai donc essayé ceci (clojure 1.3):

user=> (defn f [] 
           (def ^:dynamic x 5) 
           (defn g [] (println x)) 
           (defn h [] (binding [x 3] (g))) 
           (h))
#'user/f
user=> (f)     
5
nil

Confus, j'ai essayé un peu plus simple de code:

user=> (def ^:dynamic y 5)
#'user/y
user=> (defn g [] (println y))
#'user/g
user=> (defn h [] (binding [y 3] (g)))
#'user/h
user=> (h)
3
nil

Quelle est la différence entre les deux morceaux de code? Pourquoi le deuxième exemple, le travail, mais la première ne l'est pas?

Astuce: je viens de réaliser que les œuvres suivantes (ne pas bien comprendre pourquoi):

user=> (def ^:dynamic y 5)
#'user/y
user=> (defn f [] (defn g [] (println y)) (defn h [] (binding [y 3] (g))) (h))
#'user/f
user=> (f)
3
nil
user=> 
InformationsquelleAutor Kevin | 2012-07-30