Prolog - Einführung

Grundlagen

Prolog zählt zu den KI-Sprachen und orientiert sich an der mathematischen Logik. Es gibt Aussagen, die wahr oder falsch sind, und Aussageformen, die Variable enthalten und erst durch Ersetzen der Variablen durch konkrete Werte (Atome) zu wahren (true) oder falschen (false) Aussagen werden. Aussagen und Aussageformen nennt man auch Prädikate. Prädikate können durch mehrere Teilprädikate definiert werden, Klauseln genannt.

Klauseln bestehen aus dem Prädikatsnamen und gegebenenfalls aus einer in Klammern eingeschlossenen Parameterliste, zusammen dem Kopf der Klausel. Die Parameter können Atome, Variable (Platzhalter für Atome) oder der Unterstrich _ sein, letzteres als Platzhalter für Atome ohne Wirkung.

Klauseln können weitere Prädikate aufrufen. In diesem Fall folgt auf dem Kopf nach :- die Liste dieser Prädikate, genannt Rumpf. Nur wenn alle Prädikate des Rumpfes den Wert true haben, erhält auch die Klausel den Wert true. Fakten sind Klauseln ohne Rumpf bzw. mit :-true als Rumpf und sind immer wahr.

Gestartet wird durch Aufruf eines Prädikats, bei dem evtl. Variable durch Atome ersetzt wurden. Der Rechner versucht dann, weitere Klauseln und Atome so zu einer Schlusskette zu kombinieren, so dass das aufrufende Prädikat den Wert true erhält. Ausgegeben werden die benötigten Atome und der Wahrheitswert. Prolog ermöglicht während des Kombinierens, selbstständig neue Klauseln zu bilden, die dann zur Problemlösung genutzt werden.

Ursprünglich wurde beim Ablauf eines Prolog-Programms dieses von einem Interpreter stückweise analysiert und in Maschinensprache umgesetzt. Mittlerweile gibt es auch Compiler, die das gesamte Programm vor dem Ablauf in Maschinensprache übersetzen und so einen deutlichen Geschwindigkeitsgewinn bieten.

Gearbeitet werden soll hier SWI-Prolog bzw. SWISH-Prolog. SWI-Prolog muss auf dem eigenen Rechner installiert werden, während SWISH-Prolog als dessen Online-Version ohne Installation auskommt.

SWI-Prolog

Beim Start öffnet sich ein Fenster - das Hauptfenster -, das zur Organisation der Prolog-Umgebung dient, Meldungen des Compilers anzeigt und in dem man Abfragen eingeben kann.

Unter dem Menüpunkt File wird mit New angeboten, ein neues Programm zu erstellen oder ein altes mit Edit zu bearbeiten. Consult kompiliert ein fertiges Programm, dessen Name hierzu eingegeben werden muss.

Ruft man New oder Edit auf, so öffnet sich ein zweites Fenster mit einem Editor, in dem man ein Programm auf gewohnte Weise bearbeiten kann. Ein Programm kann gespeichert oder geöffnet werden. Wichtig ist unter dem Menüpunkt Compile die Option Compile Buffer, mit der das angezeigte Programm kompiliert werden kann.

Programmfehler werden bereits beim Editieren farblich markiert, ebenso Fehler, die beim Compilieren entdeckt werden. Fehlermeldungen des Compilers werden als gesonderte Meldung angezeigt und ebenso im Hauptfenster.

Damit sind die für das Programmieren nötigen Funktionen von SWI-Prolog erklärt!

SWISH-Prolog

Die Online-Version von SWI-Prolog kann man über den Link swish.swi-prolog.org erhalten. Nach dem Start teilt sich der Bildschirm in zwei Eingabe-Bereiche auf:
Rechts unten (roter Pfeil) findet man das Hauptfenster, In ihm kann eine Abfrage eingeben werden, das durch den Button RUN am rechten unteren Fensterrand gestartet werden kann.

Links kann man den Programmtext eingeben und bearbeiten. Dazu ist zunächst ist Program ( grüner Pfeil) anzuklicken, damit sich das linke Teilfenster zu einem Editor wandelt.

Am linken oberen Bildschirmrand findet man ein Menü, das zusätzliche Aktionen wie Speichern und Laden von Dateien ermöglicht. Zum Aktivieren ist jeweils das kleine Dreieck rechts neben einem Menüpunkt anzuklicken.

Programmstart

Will man ein Programm starten, so muss es, nachdem man es eingegeben hat, kompiliert werden (siehe oben). Im Hauptfenster kann man dann nach ?- den Namen des Prädikats eintippen, mit dem das Programm aufgerufen wird (Eingabe mit Punkt beenden!). Dabei kann man Parameter durch konkrete Werte ersetzen oder auch stehen lassen. Zu Variablen ohne Vorgaben sucht der Rechner Werte, so dass das Prädikat wahr wird, und gibt diese auf dem Bildschirm aus. Danach erwartet der Rechner eine Eingabe, ob die Werte so akzeptiert werden (Antwort y) oder ob er weitere Werte suchen soll (Antwort n).

Projekt Stammbaum

Zur Einführung soll ein Stammbaum erstellt werden mit den zugehörigen Verwandschaftsverhältnissen. Vorgegeben sei ein Prädikat eltern, das als ersten Parameter den Vater, als zweiten die Mutter und als dritten das Kind nennt. Die Namen sind Atome und als solche klein zu schreiben oder in Hochkomma ‘ einzuschließen.

  eltern(peter,kathi,conny).
eltern(peter,kathi,ulrich).
eltern(klaus,conny,bastian).
eltern(bastian,conny,corinna).
eltern(fritz,irene,lotti).
eltern(fritz,irene,alfred).
eltern(fritz,irene,christa).
eltern(ulrich,lotti,moritz).
eltern(ulrich,lotti,fabian).
eltern(ulrich,lotti,anna).
eltern(ulrich,lotti,theresa).
Klauseln sind Fakten!

Nun kann man weitere Prädikate ergänzen:

  vater(K,V):-eltern(V,_,K).
mutter(K,M):-eltern(_,M,K).
oma(K,O):-vater(K,V),mutter(V,O).
oma(K,O):-mutter(K,M),mutter(M,O).
Klauseln sind keine Fakten!

Zur Erläuterung: Bei oma gibt es zwei Möglichkeiten: Die Verwandschaft entsteht über den Vater oder die Mutter. Daher wird das Prädikat oma durch zwei Klauseln definiert entsprechend diesen Möglichkeiten.
Gibt man im Hauptfenster oma(anna,X). ein, so werden die Großmütter aufgelistet.

Aufgabe: Prädikate onkel, tante und vetter, cousine definieren