中間表現が作成されていると思いますが、その発掘方法はわかりません。たとえ私がしても、私は最初のアドバイスはあなたが望むより単純なルールを書くことだと思います。
最初の例は次のように書き直すことができます。
例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