0

多くの「複雑な」ルールを含む 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)

私の目的では、単純な形式のルールのみを使用する方がはるかに優れています。ルールごとに派生タプルが 1 つだけで、ルールの「OR」の組み合わせはありません。

logicblox は、単純なルールのみで構成される中間表現出力を提供しますか?

4

1 に答える 1

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つ目は少し自信がありません。2 つのルールの間に矛盾はありません。ここに問題がある場合、関数の依存関係の違反が発生する可能性があります。これは、「エラー: 関数に競合するレコードを含めることはできません」の出力またはログによってわかります。

例 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).
于 2016-12-30T16:46:00.757 に答える