Datomic - 动态查询函数

Datomic - Dynamic Query Functions

我很惊讶这不起作用:

(d/q '[:find [?e ...]
         :in $ ?field ?op ?value
         :where [?e ?field ?x]
                [(?op ?x ?value)]
         ]
       db
       :my/field
       >
       10))

如果我删除 op 并在 where 子句中的 > 中显式编码,它就可以工作。我可以不使用输入参数来引用核心 clojure 函数吗?规则会有帮助吗?或者我是否需要在运行时使用 quoting/unquotinq?

构建整个查询

谢谢。

试试这个:

(defn invoke [f & args] (apply f args))

(d/q '[:find [?e ...]
       :in $ ?field ?op ?value
       :where 
       [?e ?field ?x]
       [(myapp.utils.datomic/invoke ?op ?x ?value)]]
  db :my/field > 10)