중간 표현이 만들어 졌다고 생각하지만, 어떻게 발굴해야할지 모르겠다. 비록 내가 했어도, 나는 나의 첫 번째 충고가 당신이 원하는 더 단순한 규칙을 쓰는 것이라고 생각한다.
첫 번째 예제를 다음과 같이 다시 작성할 수 있다고 확신합니다.
예 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.
후 예
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).
후 (단부와 "."가정 완전한 절)
tuple1(x,y)
<-
(
in_tuple1(x,z),
in_tuple2(y,z)
)
;
in_tuple2(x,y).
예 2 전