Насколько я понимаю (из чтения документации и источника ), в настоящее время Clojure (начиная с версии 1.2) поддерживает только именованные макросы, определенные с помощью defmacro.
Возможно, однако, что вы можете использовать внутреннюю часть Clojure для получения какого-то анонимного макроса, напрямую вызывая функцию Java Var.setMacro () для некоторой анонимной переменной var. Это то, что defmacro использует под капотом для создания макросов.
например. Вы можете сделать:
(def macro-var (var (fn [...] ...)))
(.setMacro macro-var)
И читатель Clojure впоследствии интерпретирует var, содержащийся в macro-var, как макрос. Однако вам придется выяснить, как все правильно определить, и в будущих версиях Clojure все может сломаться.
Clojure 1.3 (в настоящее время в альфа-версии, но полностью работоспособный) приносит различные другие улучшения, например, символьные макросы, поэтому также стоит посмотреть.