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).