logicblox简单规则中间表示

时间:2016-10-10 08:15:51

标签: logicblox

我有一个logiql文件,其中有很多"复杂的"规则。

以下是一些例子:

tuple1(x), tuple2(x), function1[y, z] = x <- in_tuple1(x), in_tuple2(x, y), in_tuple3[x, y] = z.

tuple1(x,y) <- (in_tuple1(x,z), in_tuple2(y,z)); in_tuple2(x,y)

就我的目的而言,仅使用简单形式的规则会好得多:每个规则只有一个派生元组而没有&#34; OR&#34;规则的组合。

logicblox是否提供了一些只包含更简单规则的中间表示输出?

1 个答案:

答案 0 :(得分:1)

我认为已经创建了中间表示,但我不知道如何发掘它们。即使我这样做,我认为我的第一个建议是编写你想要的更简单的规则。

我非常有信心第一个例子可以重写如下。

示例1之前

tuple1(x),
tuple2(x),
function1[y, z] = x
<-
  in_tuple1(x),
  in_tuple2(x, y),
  in_tuple3[x, y] = z.

示例1

之后
tuple1(x) <- in_tuple1(x), in_tuple2(x, y), in_tuple3[x, y] = _.
tuple2(x) <- in_tuple1(x), in_tuple2(x, y), in_tuple3[x, y] = _.
/** alternatively
  tuple1(x) <- function1[_, _] = x.
  tuple2(x) <- function1[_, _] = x.
**/

function1[y, z] = x
<-
  in_tuple1(x),
  in_tuple2(x, y),
  in_tuple3[x, y] = z.

我对第二个人的信心不那么自信了。这两条规则之间没有冲突。如果这里出现问题,您可能会遇到功能性依赖项违规,您可以通过输出或记录“错误:函数不能包含冲突的记录”来了解这一点。

示例2之前(假设完整条款,结尾处有“。”)

tuple1(x,y)
<-
  (
    in_tuple1(x,z),
    in_tuple2(y,z)
  )
  ;
  in_tuple2(x,y).

示例2

之后
tuple1(x,y)
<-
  in_tuple1(x,z),
  in_tuple2(y,z).

tuple1(x,y)
<-
  in_tuple2(x,y).