Bahnauskunftssystem in Prolog

1. Lösungsschritt

/* Datenbasis bzw. Datenbank */
/* nur aus Fakten bestehend */

strecke(erfurt,weimar,21).
strecke(weimar,apolda,16).
strecke(weimar,bad_berka,15).
strecke(weimar,jena,23).
strecke(apolda,naumburg,23).
strecke(naumburg,halle,43).
strecke(halle,leipzig,41).
strecke(naumburg,leipzig,54).
strecke(naumburg,camburg,13).
strecke(camburg,jena,14).
strecke(jena,stadtroda,15).
strecke(stadtroda,hermsdorf,11).
strecke(hermsdorf,gera,19).
strecke(jena,kahla,15).
strecke(kahla,orlamuende,5).
strecke(orlamuende,rudostadt,12).
strecke(orlamuende,poessneck,14).
strecke(rudolstadt,saalfeld,11).
strecke(saalfeld,probstzella,25).
strecke(erfurt,soemmerda,25).
strecke(soemmerda,sangerhausen,45).
strecke(sangerhausen,eisleben,22).
strecke(eisleben,halle,38).
/* strecke(X,Y,K) bedeutet: Es gibt eine direkte Verbindung von X nach Y und die ist K km lang. */

Mängel dieser ersten Lösung:
Auf Anfragen, die sich auf eine Verbindung nicht direkt benachbarter Orte beziehen, erhält man lediglich die Antwort "No.".
Selbst die Anfrage
?-strecke(leipzig, halle, W).
scheitert, da die Verbindungen nur in einer Richtung eingegeben wurden und somit auch nur in dieser erkannt werden.

Letzteren Mangel kann man wie folgt beheben:
1. Alle Fakten noch einmal eintippen mit umgekehrter Reihenfolge Start- / Zielort.
Das macht viel Arbeit. Man bedenke auch die eventuellen Wartungs- /Erweiterungsarbeiten am Programm.
2. Man fügt eine Regel ein, die diesen Mangel behebt.

zur Lösung

Zurck