core.logic中的意外行为联合目标

时间:2016-07-29 22:49:14

标签: clojure clojure-core.logic

我很难理解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])) => ()

0 个答案:

没有答案