Clojure宏为映射数组中的每个元素创建符号的问题

时间:2019-03-01 14:52:25

标签: clojure

基本上我是宏的新手,正在尝试通过宏从地图数组中创建符号并得到错误:
CompilerException java.lang.IllegalArgumentException:不知道如何从clojure.lang创建ISeq。符号
但是能够使其适用于地图而不是地图数组并调用
(gensym-of-map〜args〜ctx)
请帮助解决gensym-of-amap宏

(defmacro gensym-of-amap[args ctx]
  `(let [~@(mapcat (fn [[k v]] [k `~v]) ctx)] 
     (prn "access ~args via ~'aa ~'bb and ctx syms ~'a"))
  ) 
(defmacro gensyms[ctx args] 
  `(let [] (fn ~args
     (for [~'c '~ctx]
       (gensym-of-amap ~args ~'c) ;run foreach ctx
        )))) 
(def test-macro (gensyms [{a 1} {a 2}] [aa bb])) 
(apply test-macro [1 2])

0 个答案:

没有答案