gpt4 book ai didi

clojure - clojure 有标识符宏吗?

转载 作者:行者123 更新时间:2023-12-04 22:44:41 27 4
gpt4 key购买 nike

换句话说,有没有办法在看起来不像 (MACRO arg* ...) 的表单上触发宏扩展? .

举一个假设的例子:

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

我真正想做的是调用 macroexpand在具有自由变量的术语上。我希望这些自由变量在宏扩展期间应该具有特殊含义,但之后应该恢复“正常”。

最佳答案

该工具目前作为 Clojure Contrib 库的功能之一存在于 Clojure tools.macro .相关的 tools.macro 宏是 defsymbolmacro , with-symbol-macrossymbol-macrolet – 这是 symbol-macrolet README 中的示例(现在可以在 master 分支的顶端找到):

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

expands to (def def foo)


symbol-macrolet用于引入词法范围的符号宏,而 defsymbolmacro引入要在任何 with-symbol-macros 中应用的符号宏 block (只有在 Clojure 编译器本身的支持下才能取消 with-symbol-macros)。

AFAIK, symbol-macrolet 的某些版本很长一段时间以来,它一直是 Clojure 编译器本身的一项计划功能;预计当它着陆时,它可能会被称为 letmacro .但是,没有具体的公开时间表,当然也不能保证它会落地。

tools.macro 使用的名称受到 Common Lisp 的启发,其中相关的宏被称为 define-symbol-macro 。和 symbol-macrolet .由于这是 CL 中的标准编译器功能,因此 define-symbol-macro 引入的符号宏实际上是在没有任何辅助宏的帮助下全局应用的。

关于clojure - clojure 有标识符宏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33423407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com