带有clojure的动态代码

col*_*inf 3 clojure

我正在尝试在clojure中创建一些动态代码.在下面的函数中,我们的想法是动态生成(和)宏的条件.

(defn matching-keys [rec match-feed keys]
  (> (count (clojure.set/select #(and (for [k keys]
                                        (= (% k) (rec k))))
                                (set match-feed)))
     0))
Run Code Online (Sandbox Code Playgroud)

所以,如果它工作!! 然后这个代码会在传递以下键时生成(和)类似的东西[:tag :attrs]:

(and (= (% :tag) (rec :tag))
     (= (% :attrs) (rec :attrs)))
Run Code Online (Sandbox Code Playgroud)

我一直在搞乱各种各样的`` and〜操作员,试图让它起作用,现在我处于混乱状态.欢迎任何指导.

谢谢,

科林

小智 5

您不需要为此动态生成代码.将匿名函数更改为#(every? (fn [k] (= (% k) (rec k))) keys)应该执行的操作而不在运行时生成代码.

使用高阶函数的能力意味着您几乎不需要动态生成代码.