我很难理解conjo
core.logic 中目标的以下行为。
首先,一切似乎都很好。
(l/run* [q]
(l/conjo q 2 3 [1 2 3] )) => ([1])
当 时目标成功q = [1]
,因为(conj [1] 2 3) == [1 2 3]
另一方面,当我要求 2 时lvars
,我得到以下我不明白的结果。我期待a = [1]
和b = 2
。
(l/run* [a b]
(l/conjo a b 3 [1 2 3] )) => (([_0 _1] :- (clojure.core.logic/conjo <lvar:a__25296> _1 3 [1 2 3])))
语法:- (clojure.core.logic/conjo <lvar:a__25296>
是什么意思?为什么我不受lvars
a 和 b 的约束?目标成功的可能性只有一种。
也许我需要再暗示一些。
(l/run* [a b]
(l/== b 2)
(l/conjo a b 2 [1 2 3])) => ()
现在真的很奇怪。我设置b
为明确地2
,然后没有解决方案存在。
任何线索我在这里想念什么?
编辑 上面的例子中有一个错字。最后一个真的应该是:
(l/run* [a b]
(l/== b 2)
(l/conjo a b 3 [1 2 3])) => ()