A macro is a function that's evaluated at compile time rather than at
runtime. Clearly the compiler needs some mechanism to distinguish between
the two, correct?
Clojure already has metadata and functions, so using a metadata flag on the
var introduces no new types. It also has the advantage of be
I see that macro are defined with associated metadata :macro true in its
associated var.
Evaluate:
(meta (var defn))
and you see the :macro true in metadata
Why? In other lisp, macro are the result of evaluate (mlambda ... ) or
something alike, that is, macro are values that are evaluated in an