如何在Datomic中查找具有多个属性之一的实体

时间:2015-06-13 12:05:58

标签: datomic

这似乎是或子句的用例:

'[:find ?e1
  :where (or [?e1 :a ?e2]
             [?e1 :b ?e2]
             [?e1 :c ?e2])
         [?e2 :x "X"]]

但它失败了Unable to resolve symbol: ?e1 in this context

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效

(let [rules '[(orclause ?e1 ?e2) [?e1 :a ?e2]
              (orclause ?e1 ?e2) [?e1 :b ?e2]
              (orclause ?e1 ?e2) [?e1 :c ?e2]]
      dbval (d/db conn)]
  (d/q '[:find ?e1
         :in $ ?e2 %
         :where (orclause ?e1 ?e2)]
       dbval "X" rules))

答案 1 :(得分:0)

原来我只是使用了过时的版本,或者在0.9.5130中引入了子句。