对于其他变量的每个可能值,Datalog是否可以为其中一个变量只有一个值的事实编写查询?
e.g。找到所有X
,以便X
Y
只有一个expr(X, Y)
答案 0 :(得分:1)
在简单的数据记录中,您可以通过首先计算具有多个X的Y,然后使用它来计算具有1 X的Y来表达这一点。
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.