2

这是一个矛盾:

(run* [q]
  (== q true)
  (== q false)) 

-> ()

因为不可能同时存在trueaq 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必须truefalse. 如何确保第二个目标不匹配?

另一个例子

(run* [q]
  (fresh [x]
    (featurec x {:k false})     
    (== q true)
    (featurec x {:k q}))) -> (true)

我将其解释为:

  • x是与:kas类似的地图false
  • qtrue
  • q是的:kx

我到底想做什么?

我正在尝试用来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])])
4

0 回答 0