7 logic clojure minikanren clojure-core.logic
这不是作业 - 解决方案已在文中.我只是无法理解解决方案.
(run* (q)
(let [a (== true q)
b (== false q)]
b))
Run Code Online (Sandbox Code Playgroud)
(false)
Run Code Online (Sandbox Code Playgroud)
()
Run Code Online (Sandbox Code Playgroud)
显然,"a(== true q)"行未被执行,因为只有b是目标.这让我很困惑.到目前为止,我对逻辑编程的心理模型是:
输出管理通过整个程序的那些
因此,"a(== true q)"迫使q = true,这使得不可能满足"b(== false q)"线.
然而,显然只执行"计算目标所需的数量".这是怎么回事?core.logic/mini-kanren的正确心理执行模式是什么?
谢谢
(顺便说一句,我显然是错的,因为mini-karen + core.logic互相攻击 - 我只想了解我做错了什么.)
==
产生目标.但是你没有通过a
目标来运行.所以跑步不知道.类似的情况是这样的:
(defn call [f] (f))
(call
(let [a #(println "a")
b #(println "b")]
b))
Run Code Online (Sandbox Code Playgroud)
该a
函数已创建但未传递给call
.所以它永远不会被执行.