我很难理解core.logic中conjo
目标的以下行为。
首先,一切似乎都很好。
(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>
是什么意思?
为什么我为a和b绑定了lvars
?目标只有一种可能性。
也许我需要再暗示一下。
(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])) => ()