这不是家庭作业——解决方案已经在文本中。我只是无法理解解决方案。
问题
(run* (q)
(let [a (== true q)
b (== false q)]
b))
正确的解决方案
(false)
我相信的解决方案
()
我的困惑
显然“a (== true q)”行没有被执行,因为只有 b 是目标。这让我很困惑。到目前为止,我的逻辑编程心智模型是:
- 考虑对 q 的所有可能分配
输出设法通过整个程序的那些
因此,“a (== true q)”强制 q = true,这使得不可能满足“b (== false q)”行。
然而,显然只执行“计算目标所需的事情”。这是怎么回事?core.logic / mini-kanren 的正确心理执行模型是什么?
谢谢
(顺便说一句,我显然错了,因为 mini-karen + core.logic 彼此一致——我只是想了解我做错了什么。)