2009-09-14 9 views

Antwort

3

Verzeihen Sie mir, wenn ich die Syntax falsch, ist es schon eine Weile her, dass ich mit Prolog gespielt.


Eine typische Lösung ist eine andere Ebene zu den Klauseln einzuführen, wie folgt aus:

married(X, Y) :- wife(X, Y). 
married(X, Y) :- wife(Y, X). 

und spezifiziert dann die Beziehungen der Frau Klausel statt mit:

wife(jane, bob). 
wife(alice, john). 

?- married(jane, X). 
X = bob 

Weitere Informationen finden Sie finden Sie hier: CSc 8710, Deductive Databases and Logic Programming, chapter 6 - Logic and databases, unter 6.5 - Special Relations.

1

Wie ich es verstehe, ist das grundlegende Problem, dass, wenn zirkuläre Definitionen erlaubt sind, obwohl die resultierende Sprache selbstkonsistent ist, es subtile Konsequenzen geben kann, die oft kontraintuitiv sind. Es gibt auch Überlegungen zur Effizienz (zirkuläre Definitionen verursachen zusätzlichen Overhead).

Sehen Sie diese detailed discussion für viele weitere Erklärungen und einige verschiedene Sichtweisen.

1

Eine mögliche Lösung ist die Verwendung von Tabling, siehe z.B. this answer.

Verwandte Themen