Does clojure have id macros?

In other words, is there a way to cause macro decomposition in forms that don't look like (MACRO arg* ...).

To give a hypothetical example:

(defmacro my-var
  (do (printf "Using my-var!\n") 42))
(+ my-var 1) ;; Should print & return 43

What I really want to do is call macroexpandon a member with free variables. I want these free variables to have special meaning during macro expansion, but then have to go back to "normal".

+4
source share
2 answers

Sorry, no, Clojure does not have this feature.

, quote ', syntax-quote, dispatch # .., , , .

, , , , .

- , .

+2

Clojure Clojure Contrib tools.macro. tools.macro defsymbolmacro, with-symbol-macros symbol-macrolet - a symbol-macrolet README ( ):

(symbol-macrolet [def foo]
  (def def def))

(def def foo)

symbol-macrolet , defsymbolmacro , with-symbol-macros ( with-symbol-macros Clojure ).

AFAIK, symbol-macrolet Clojure ; , , , , letmacro. , , , , .

, tools.macro, Common Lisp, define-symbol-macro symbol-macrolet. CL, , define-symbol-macro, - .

+8

Source: https://habr.com/ru/post/1613718/


All Articles