Hiho - ich schon wieder!
Hier mal ein etwas komplizierteres Beispiel.
Gegebene DB:
directTrain(lueneburg, hamburg).
directTrain(bremen, lueneburg).
directTrain(braunschweig, hannover).
directTrain(hannover, lueneburg).
directTrain(hamburg, kiel).
directTrain(magdeburg, braunschweig).
directTrain(berlin, magdeburg).
directTrain(moskau, krakau).
Es soll eine Regel definiert werden, die prüft, ob man von einer Stadt zu einer anderen Reisen kann. Das kann anhand der vorhandenen Fakten geschehen:
travel(A,B) :- directTrain(A,B).
Auch wenn kein Fakt dafür definiert ist - über Umwege kommt man auch von Berlin nach Hamburg. Dazu brauche ich wieder Rekursion - gibt es eine andere Stadt C, zu der A fährt und kann man von dieser Stadt C nach B reisen:
travel(A,B) :- directTrain(A,C), travel(C,B).
So nun zum Problem:
?- travel(lueneburg, hamburg). gibt true zurück. Das ist soweit korrekt - es gibt ja einen Fakt, der das belegt.
?- travel(hamburg, lueneburg). gibt allerdings false zurück - es ist zwar die gleiche Verbindung, aber A und B sind ja hier vertauscht.
Ich hab also die erste Regel erweitert:
travel(A,B) :- directTrain(A,B); directTrain(B,A).
Jetzt gibt auch meine zweite Anfrage true zurück.
Es geht weiter - folgende Anfrage ist gültig:
?- travel(magdeburg, bremen).
Diese jedoch nicht:
?- travel(bremen, magdeburg).
Wo liegt das Problem? Welche weitere Regel brauche ich, damit ich alle Verbindungen korrekt abfragen kann? Eine Erklärung dazu wäre auch sehr hilfreich.
Dankö und
mfG Christoph