2016-10-10 1 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 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 전