这是一个矛盾:
(run* [q]
(== q true)
(== q false))
-> ()
因为q不能同时为true
和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
为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])])