I am looking at a defmacro source that uses "let" in its definition:
(def ^{:doc "Like defn, but the resulting function name is declared as a macro and will be used as a macro by the compiler when it is called." :arglists '([name doc-string? attr-map? [params*] body] [name doc-string? attr-map? ([params*] body)+ attr-map?]) :added "1.0"} defmacro (fn [&form &env name & args] (let [prefix (loop [p (list name) args args]
However, let is defined as the macro itself:
(defmacro let "binding => binding-form init-expr Evaluates the exprs in a lexical context in which the symbols in the binding-forms are bound to their respective init-exprs or parts therein." {:added "1.0", :special-form true, :forms '[(let [bindings*] exprs*)]} [bindings & body] (assert-args (vector? bindings) "a vector for its binding" (even? (count bindings)) "an even number of forms in binding vector") `(let* ~(destructure bindings) ~@body ))
Can someone explain how this works, since I cannot figure out how to define "defmacro" in terms of things for which "defmacro" is already defined. (if that makes sense :)
Zubair
source share