これは矛盾です:
(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
ためtrue
、false
. 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])])