Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros Clojure宏和符号绑定_Macros_Clojure_Symbols - Fatal编程技术网

Macros Clojure宏和符号绑定

Macros Clojure宏和符号绑定,macros,clojure,symbols,Macros,Clojure,Symbols,我不知道该怎么表达 我写了一个宏,它有两个参数。第一个基本上包含用于生成let表达式的标识符。第二个是要在let表达式中使用的代码(它希望能够访问这些标识符) 例如: (match (Add {ast-> x}) (println x)) 当第二个参数是原始代码时,一切都很顺利。x绑定到let表达式中定义的x(当宏扩展时,它只显示为x)。但是,当第二个参数是生成(println x)的宏时,x将扩展为类似user/x的内容 关于如何解决这个问题,有什么好主意吗?听起来您的第二个宏定义如下

我不知道该怎么表达

我写了一个宏,它有两个参数。第一个基本上包含用于生成let表达式的标识符。第二个是要在let表达式中使用的代码(它希望能够访问这些标识符)

例如:

(match (Add {ast-> x}) (println x))
当第二个参数是原始代码时,一切都很顺利。x绑定到let表达式中定义的x(当宏扩展时,它只显示为x)。但是,当第二个参数是生成(println x)的宏时,x将扩展为类似user/x的内容


关于如何解决这个问题,有什么好主意吗?

听起来您的第二个宏定义如下:

(defmacro foo
  []
  `(println x))
这是不正确的,因为
x
将被命名空间限定。在这种情况下,第二个宏的正确版本是:

(defmacro foo
  []
  `(println ~'x))
现在,
println
调用中的
x
将是一个文本x符号,不限定名称空间