2016-10-10 1 views
0

Ich habe eine logiql-Datei mit vielen "komplizierten" Regeln.logicblox einfache Regel Zwischendarstellung

Hier sind einige Beispiele:

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) 

Für meine Zwecke wäre es viel besser, nur Regeln in der einfachen Form zu haben: nur eine abgeleitete Tupel pro Regel und keine „ODER“ Kombinationen von Regeln.

Bietet Logicblox eine Zwischendarstellungsausgabe, die nur aus einfacheren Regeln besteht?

Antwort

1

Ich denke, es sind Zwischendarstellungen erstellt, aber ich weiß nicht, wie Sie sie ausgraben. Selbst wenn ich es täte, wäre mein erster Rat, die einfacheren Regeln zu schreiben, die Sie wollen.

Ich bin ziemlich zuversichtlich, dass das erste Beispiel wie folgt umgeschrieben werden kann.

Beispiel 1

Vor
tuple1(x), 
tuple2(x), 
function1[y, z] = x 
<- 
    in_tuple1(x), 
    in_tuple2(x, y), 
    in_tuple3[x, y] = z. 

Beispiel 1 Nach

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. 

Ich bin ein wenig weniger zuversichtlich, mit dem zweiten. Keine Konflikte zwischen den beiden Regeln springen auf mich. Wenn hier ein Problem auftritt, erhalten Sie möglicherweise eine funktionale Abhängigkeitsverletzung, die Sie bei der Ausgabe oder Protokollierung von "Fehler: Funktion darf keine widersprüchlichen Datensätze enthalten" kennen.

Beispiel 2 Vor dem (angenommener vollständigen Satz mit "" am Ende)

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

Beispiel 2 Nach

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

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