我不明白为什么从以下两个示例中,第一个返回正确的值(1)
,而第二个返回()
。我已经预料到(:key)
它找不到解决方案的结果或异常,但不是一个空列表。
(l/run* [q]
(l/== {:key 1} {:key q}))
;; BUT IT DOESNT WORK
(l/run* [q]
(l/== {:key 1} {q 1}))
我不明白为什么从以下两个示例中,第一个返回正确的值(1)
,而第二个返回()
。我已经预料到(:key)
它找不到解决方案的结果或异常,但不是一个空列表。
(l/run* [q]
(l/== {:key 1} {:key q}))
;; BUT IT DOESNT WORK
(l/run* [q]
(l/== {:key 1} {q 1}))
我还没有发现它是否记录为预期的行为,但是从我的(有限的)理解来看,查看源代码,看起来地图的统一只发生在值上,而不是键上。
正如在 中实现的那样unify-with-map*
,当在第一个映射中core.logic
找到键:key
时,它会在第二个中查找它的值,但没有找到它,因此放弃了统一。由于没有解决方案,就像@Arthur Ulfeldt 说的那样,你最终得到()
.