Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
Clojure 如何从传递的参数在宏中创建符号_Clojure - Fatal编程技术网

Clojure 如何从传递的参数在宏中创建符号

Clojure 如何从传递的参数在宏中创建符号,clojure,Clojure,只是尝试宏的限制或未知,我无法在运行时使用更改的键对符号映射进行固定长度。 因此,当k1 k2作为参数传递给进程arity时,它应该创建j1 j2符号,用于从map宏访问syms中的k1和k2值。 给出编译错误: CompilerException java.lang.IllegalArgumentException:不知道如何从clojure.core$map创建ISeq 引用-取消引用使编写宏变得困难:-( macroexpand-1是一个很有价值的工具。请使用它 (defmacro pro

只是尝试宏的限制或未知,我无法在运行时使用更改的键对符号映射进行固定长度。
因此,当k1 k2作为参数传递给进程arity时,它应该创建j1 j2符号,用于从map宏访问syms中的k1和k2值。
给出编译错误:
CompilerException java.lang.IllegalArgumentException:不知道如何从clojure.core$map创建ISeq
引用-取消引用使编写宏变得困难:-(


macroexpand-1
是一个很有价值的工具。请使用它

(defmacro process-arity[args]
    `(let [] (fn ~args
                 (let [~'map1 (zipmap [~'j1 ~'j2] ~args)]
                     (syms-from-map ~'map1)))))

(符号来自地图~'map1)
无法按您期望的方式工作。我建议您将其转换为函数。

这些模糊的宏问题从何而来?这是偶然的,还是thaybis建议每个人都去宏野生?如果我生成j1、j2符号,通过将其转换为函数,这些符号如何从ma从符号传递到其他宏p fn?
(defmacro process-arity[args]
    `(let [] (fn ~args
                 (let [~'map1 (zipmap [~'j1 ~'j2] ~args)]
                     (syms-from-map ~'map1)))))