这是一个矛盾:
(run* [q]
(== q true)
(== q false))
-> ()
因为不可能同时存在true
aq false
。
这不应该也是矛盾的吗?
(run* [q]
(featurec q {:k true})
(featurec q {:k false}))
-> ((_0 :- (clojure.core.logic/featurec _0 {:k true})
(clojure.core.logic/featurec _0 {:k false})))
我不知道那是什么:-
意思。但由于地图键是唯一的,我想不可能有一个地图:k
必须true
和false
. 如何确保第二个目标不匹配?
另一个例子
(run* [q]
(fresh [x]
(featurec x {:k false})
(== q true)
(featurec x {:k q}))) -> (true)
我将其解释为:
x
是与:k
as类似的地图false
。q
是true
。q
是的:k
值x
我到底想做什么?
我正在尝试用来featurec
创建目标,例如:
(defn is-a-foo [x v]
(featurec x {:foo v}))
(defn is-a-bar [x v]
(featurec x {:bar v}))
然后我想说:
(defn foo-implies-bar [x]
(conde [(is-a-foo [x true]) (is-a-bar [x true])])