0
Datalogでは、他の変数の可能な値ごとに、変数の1つに正確に1つの値があるファクトのクエリを記述できますか?Datalogでの一意性のクエリ?
見つけるすべてX
一つだけX
ためのあなたは、コンピューティングによって最初にこれを表現することができ、各Y
プレーンデータログで
Datalogでは、他の変数の可能な値ごとに、変数の1つに正確に1つの値があるファクトのクエリを記述できますか?Datalogでの一意性のクエリ?
見つけるすべてX
一つだけX
ためのあなたは、コンピューティングによって最初にこれを表現することができ、各Y
プレーンデータログで
expr(X, Y)
中に存在するように、Yの複数のXを持って、その後、Yの1 Xとを計算することを利用しています
problem(y) <- expr(x1, y), expr(x2, y), x1 != x2.
exactly_one_opt1(y) <- expr(_, y), !problem(y).
ほとんどのシステムでは、おそらくより効率的なソリューションになりますが、集約構文は標準のDatalogではありません。私はここでLogiQL(LogicBlox Datalog)の構文を使用しています:
count[y] = c <- agg<<c = count()>> expr(_, y).
exactly_one_opt2(y) <- count[y] = 1.
最初のものは標準のDatalogですか?否定は標準的な機能ですか? –
正式な標準はありませんが、否定は私が知っているすべてのDatalogの変種でサポートされていますので、標準の機能と考えることができます。ここでの例は、否定の非常に基本的な使用法です。否定のセマンティクスは、再帰でネゲートが使用される場合(大部分のシステムは成層ネゲーションと呼ばれるものが実装されている)、否定で使用される変数が規則で肯定的にバインドされていない(安全でない否定として知られている) –