core.logic unification匹配map中的值但不匹配key

时间:2014-12-05 20:18:21

标签: clojure clojure-core.logic

我不明白为什么从以下两个例子中,第一个返回正确的值(1),而第二个返回()。我已经预料到结果(:key)或者它无法找到解决方案的异常,但不是空列表。

(l/run* [q]
  (l/== {:key 1} {:key q}))

;; BUT IT DOESNT WORK

(l/run* [q]
  (l/== {:key 1} {q 1}))

1 个答案:

答案 0 :(得分:3)

我没有发现它被记录为预期的行为,但是从我(有限的)理解看source code,看起来地图的统一只发生在值而不是键上。

正如在unify-with-map*中实现的那样,当core.logic在第一个地图中找到关键字:key时,它会在第二个地图中查找其值,但找不到它,因此在统一。由于没有像@Arthur Ulfeldt所说的那样的解决方案,你最终会得到()