2016-10-10 7 views
0

私は、多くの "複雑な"ルールを持つlogiqlファイルを持っています。唯一の派生ルールあたりのタプルなし「OR」ルールの組み合わせ:簡単なフォームでのみルールを持つことがはるかに良いだろう、私の目的のために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

中間表現が作成されていると思いますが、その発掘方法はわかりません。たとえ私がしても、私は最初のアドバイスはあなたが望むより単純なルールを書くことだと思います。

最初の例は次のように書き直すことができます。

例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 1と確信して実施例1

tuple1(x), 
tuple2(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). 

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

例2(との完全な句を想定 "" 終了時に)前

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

例2