2

これは矛盾です:

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

-> ()

同時にあるaqは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ためtruefalse. 2 番目の目標が一致しないようにするにはどうすればよいですか?

もう一つの例

(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])])
4

0 に答える 0