2016-10-25 3 views
0

Datalogでは、他の変数の可能な値ごとに、変数の1つに正確に1つの値があるファクトのクエリを記述できますか?Datalogでの一意性のクエリ?

見つけるすべてX一つだけXためのあなたは、コンピューティングによって最初にこれを表現することができ、各Yプレーンデータログで

答えて

0

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. 
+0

最初のものは標準のDatalogですか?否定は標準的な機能ですか? –

+0

正式な標準はありませんが、否定は私が知っているすべてのDatalogの変種でサポートされていますので、標準の機能と考えることができます。ここでの例は、否定の非常に基本的な使用法です。否定のセマンティクスは、再帰でネゲートが使用される場合(大部分のシステムは成層ネゲーションと呼ばれるものが実装されている)、否定で使用される変数が規則で肯定的にバインドされていない(安全でない否定として知られている) –