5

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

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

;; BUT IT DOESNT WORK

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

1 回答 1

3

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

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

于 2014-12-06T23:02:30.893 回答