0

是否可以在 Datalog 中为其他变量的每个可能值编写一个事实查询,其中一个变量只有一个值?

例如找到所有这样的,每个X只有一个XYexpr(X, Y)

4

1 回答 1

1

在普通的 Datalog 中,您可以通过首先计算具有多个 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.
于 2016-10-25T17:42:25.217 回答