刚从core.logic版本“0.8.11”开始:
(q/run* [q]
(q/fresh [a]
(q/membero a [2 3]))
(q/membero q [1]))
我不明白结果:(1 1)。
我的理解是我a用fresh创建了另一个变量,它可以取2或3q的值。并且可以取1。因此我期待看到类似的东西:(1), or (1 2 1 3),或者可能([1 2] [1 3])甚至({:q 1 :a 2} {:q 1 :a 3}),但不是实际的结果。
另一个例子:
(q/run* [q]
(q/fresh [a]
(q/membero a [1 2 3])
(q/membero q [3 4 5])
(q/== a q)))
;; make sense to me, returns (3)
(q/run* [q]
(q/fresh [a]
(q/membero a [1 2 3]))
(q/membero q [3 4 5]))
;; does not make sense to me, returns (3 4 3 5 4 3 5 4 5)
;; I was expecting `(3 4 5)`
有人可以解释这里发生了什么吗?