对于其中一个变量只有一个值的事实,对于其他变量的每个可能值,是否有可能在Datalog中编写查询?
例如找到所有 X ,这样 expr(X, Y) 中每个 Y 只有一个 X
X
expr(X, Y)
Y
在简单的Datalog中,您可以通过首先计算具有多个X的Y,然后使用它来计算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.
1 回答
在简单的Datalog中,您可以通过首先计算具有多个X的Y,然后使用它来计算Y的1 X来表达这一点 .
大多数系统还支持可能是更有效的解决方案的聚合,但聚合语法不是标准的Datalog . 我在这里使用LogiQL(LogicBlox Datalog)语法: