Logicblox简单规则中间表示



我有一个包含许多"复杂"规则的逻辑文件。

下面是一些例子:

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)

对于我的目的来说,只有简单形式的规则会好得多:每个规则只有一个派生元组,没有规则的"或"组合。

logicblox是否提供了一些只由简单规则组成的中间表示输出?

我认为存在中间表示,但我不知道如何挖掘它们。即使我写了,我想我的第一个建议是写你想要的更简单的规则。

我很有信心第一个例子可以重写如下:

示例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 Before(假设完整子句以"。"结尾)

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).

最新更新