Я просматривал источник clojure, и я был удивлен тем, как определяется макрос:
user=> (source when)
(defmacro when
"Evaluates test. If logical true, evaluates body in an implicit do."
{:added "1.0"}
[test & body]
(list 'if test (cons 'do body)))
nil
user=>
Я ожидал, что вместо этого будет написано что-то вроде этого:
(defmacro when [test & body] `(if ~test (do [email protected])))
Почему фактический макрос был написан менее обычным способом?