Symbols are late resolved to functions.
(def t (fn ...)) means define a Var bound to symbol t, and store the
function in it. In JVM terms, the function becomes a new class that is
instantiated.
(t (dec x)) means locate the Var bound to symbol t -- at execution
time (not compilation time) --- de-reference the function object
stored there and invoke it.
In fact, t can be temporarily rebound (using the binding macro) or
even completely replaced (using alter-var-root!) at any time. The Var
remains the same but the contents of the Var are changed.
Because of how Clojure is structured, the Var object need only be
resolved from the symbol once (in the generated Java bytecode, the Var
appears as a static final field).
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to
clo...@googlegroups.com
> Note that posts from new members are moderated - please be patient with your first post.
> To unsubscribe from this group, send email to
>
clojure+u...@googlegroups.com
> For more options, visit this group at
>
http://groups.google.com/group/clojure?hl=en
--
Howard M. Lewis Ship
Creator of Apache Tapestry
The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!
(971) 678-5210
http://howardlewisship.com