首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >logicblox简单规则中间表示

logicblox简单规则中间表示
EN

Stack Overflow用户
提问于 2016-10-10 16:15:51
回答 1查看 61关注 0票数 0

我有一个包含许多“复杂”规则的logiql文件。

下面是一些示例:

代码语言:javascript
复制
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)

就我的目的而言,最好只有简单形式的规则:每个规则只有一个派生的元组,并且没有规则的"OR“组合。

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

EN

回答 1

Stack Overflow用户

发布于 2016-12-31 00:46:01

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

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

前面的示例1

代码语言:javascript
复制
tuple1(x),
tuple2(x),
function1[y, z] = x
<-
  in_tuple1(x),
  in_tuple2(x, y),
  in_tuple3[x, y] = z.

示例1之后

代码语言:javascript
复制
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.

我对第二个没那么有信心。在我看来,这两条规则之间没有冲突。如果这里有问题,您可能会得到函数依赖冲突,您可以通过输出或记录"Error: Function cannot contain records“了解到这一点。

示例2之前(假设完整的子句带有".“。在末尾)

代码语言:javascript
复制
tuple1(x,y)
<-
  (
    in_tuple1(x,z),
    in_tuple2(y,z)
  )
  ;
  in_tuple2(x,y).

示例2之后

代码语言:javascript
复制
tuple1(x,y)
<-
  in_tuple1(x,z),
  in_tuple2(y,z).

tuple1(x,y)
<-
  in_tuple2(x,y).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39953978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档