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

sha*_*aft 5 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}))
Run Code Online (Sandbox Code Playgroud)

Bey*_*mor 3

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

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