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