Datenfluss

Daten fliessen via Parameter in eine Regel hinein oder aus ihr hinaus. Eine Parameterposition, die vor der Regelanwendung eine instanziierte Variable erwartet, ist ein Eingabeparameter (Modus „+“). Wo eine zuvor nicht instanziierte Variable erwartet wird, handelt es sich um einen Ausgabeparameter (Modus „-“). Kann ein Parameter für beides verwendet werden, weist man den Modus „?“ zu.

Die Unifikation dient als Konstruktor (Aufbau von Datenstrukturen) und trägt so zum Datenfluss bei.

Kontrollfluss

Die deklarative Semantik basiert auf der Formulierung von Bedingungen. Wie und in welcher Reihenfolge die Bedingungen erfüllt werden sollen, wird nicht spezifiziert: „Es ist Schwimmbad-Wetter falls die Sonne scheint und es warm“ ist. Es ist egal, ob ich erst auf das Thermometer und dann in den Himmel schaue oder umgekehrt.

Die prozedurale Semantik definiert eine Reihenfolge von auszuführenden Schritten: „Um herauszufinden, ob es Schwimmbadwetter ist, schaue zuerst auf das Thermometer und vergleiche die angezeigte Temperatur mit 25, dann sieh’ hoch, ob die Sonne scheint.“

Prolog kombiniert Elemente aus beiden Welten.

Strukturierung des Kontrollflusses

Es gibt drei wesentliche Strukturierungsmerkmale des Kontrollflusses:

Merkmal

Implementierung in Prolog

Beispiel

Abstraktion (Kapselung)

Prädikatsdefinition

schoen :- sonnig, warm nun kann ich die Kurzform „schoen“ verwenden, wenn immer ich „sonnig und warm“ ausdrücken will.

Sequenz

Konjugation („,“)

sonnig, warm erst wird „sonnig“ geprüft, dann „warm“.

Alternation

mehrfache Klauseln oder Disjunktion („;“)

farbig :- rot.

farbig :- blau; gelb.

Um „farbig“ zu beweisen, muss nur eine der drei Alternativen wahr sein.

Mechanismen zur Kontrollflusssteuerung

Die Unifikation hat eine zweite Funktion als Filter (pattern matching) und steuert somit den Kontrollfluss über die Auswahl von passenden Regeln.

Der Cut („!“) ermöglicht das Abschneiden unnötiger Äste des Beweisbaumes.

call ruft versucht sein Argument zu beweisen (v.a. im Falle von Variablen sinnvoll)

fail ist ein Prädikat, dass nie erfüllt werden kann (z.B. zwecks Ausgabe aller alternativen Lösungen).

Kommentar von Simon