PROLOG
PROgramming in LOGic




Programmiersprachen

Seitenbeschreibungssprachen HTML
imperative Programmiersprachen JavaScript, C++, ...
"befehlsorientiert", Abläufe werden beschrieben
logische Programmiersprachen PROLOG, LISP
Das zu lösende Problem wird als eine Anfrage formuliert.

PROLOG

Festlegung von Fakten und Regeln, welche als Klauseln bezeichnet werden
Gesamtheit aller Klauseln stellt das Programm dar

Fakten:

"Tatsachen", Beispiel: Robert ist männlich
maennl(robert).
Aufbau eines Faktum
ein Fakt besteht aus dem Prädikat ("maennl"), einer Konstante ("robert") und einem abschließendem Punkt
sowohl Prädikate als auch Konstanten werden mit kleinen Anfangsbuchstaben geschrieben
Beispiele:

maennl(robert). verh(robert,jana). elter(bernd,miriam).
maennl(bernd). verh(jana,robert). elter(bernd,verona).
maennl(daniel). verh(bernd,kristin). elter(kristin,miriam).
maennl(steve). verh(kristin,bernd). elter(kristin,verona)
maennl(robin). verh(steve,miriam). elter(steve,robin).
weibl(jana). verh(miriam,steve). elter(steve,anna).
weibl(kristin). elter(robert,daniel). elter(miriam,robin).
weibl(miriam). elter(robert,steve). elter(miriam,anna).
weibl(verona). elter(jana,daniel).  
weibl(anna). elter(jana,steve).  
Stammbaum

Anfragen:

a) Ist Steve verheiratet mit Miriam? verh(steve,miriam).
  Ist Verona ein Elternteil von Anna? elter(verona,anna).
b) Wer sind die Eltern von Daniel? elter(X,daniel).
  Mit wem ist Robert verheiratet? verh(robert,X).
  Wie heißen die Kinder von Kristin? elter(kristin,X).
c) Wer ist die Mutter von Robin? = welchen weiblichen Elternteil hat Robin? elter(X,robin), weibl(X).
  Wer sind die Großeltern von Anna? = Wer sind die Eltern von Anna's Eltern? elter(E,anna), elter(G,E).

X, E, G sind Variablen. Diese beginnen immer mit einem großen Buchstaben.

Regeln:

Möchte man nacheinander die Mütter aller im Stammbaum aufgeführten Personen suchen, so ist es sehr umständlich jedesmal die entsprechende Anfrage zu formulieren. Man kann dies vereinfachen indem man dem Programm zu den Fakten noch Regeln hinzufügt.
Beispiele:

Regelaufbau
mutter(X,Y) :- elter(X,Y), weibl(X).
vater(X,Y) :- elter(X,Y), maennl(X).
kind(X,Y) :- elter(Y,X).
schwiegermutter(X,Y) :- verh(Y,Z), mutter(X,Z).

Rekursion:

Gesucht werden nun alle Vorfahren einer Person. Vorfahren sind die Eltern, Großeltern, Urgroßeltern, Ururgroßeltern, usw.
Sie würden sich also wie folgt ermitteln lassen:

grosselter(X,Y) :- elter(Z,Y), elter(X,Z).
urgrosselter(X,Y) :- elter(Z,Y), grosselter(X,Z).
ururgrosselter(X,Y) :- elter(Z,Y), urgrosselter(X,Z).
usw.

Anders ausgedrückt: Eltern, deren Eltern, deren Eltern, usw.
Dies soll nun mit Hilfe der Rekursion (= ein Unterprogramm/eine Regel ruft sich selbst auf) zur Regel 'Vorfahr' verallgemeinert werden:

vorfahr(X,Y) :- elter(X,Y).
vorfahr(X,Y) :- elter(Z,Y), vorfahr(X,Z).

Links:

Strawberry Prolog (Windows Compiler) www.dobrev.com
Visual Prolog (Prolog Entwicklungsumgebung) www.visual-prolog.com
BinProlog www.binnetcorp.com
GNU Prolog http://gnu-prolog.in.ria.fr




www.CodingCrew.de Quelle: Arbeitsbuch PROLOG, Dümmler Verlag, H. Göhner / B. Hafenbrak  
Copyright © 2002 by Marty Winkler