3

我很难理解conjocore.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>是什么意思?为什么我不受lvarsa 和 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])) => ()
4

0 回答 0