Prolog: Weiterführende Konzepte

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Komplexe Problemlösungen[Bearbeiten]

Schleifen & Prolog - Arbeitsbäume[Bearbeiten]

Schleifen, wie man sie aus anderen Programmiersprachen kennt, sind in Prolog nicht vorgesehen. Es ist jedoch möglich, eine Schleife mit einfachen Mitteln zu erstellen. Hierzu ein kleines Beispiel:

Bsp.: 8

% DB:
schleife :- schleife.

Diese Regel, besagt, dass schleife gilt, wenn schleife gilt. Dies klingt auf den ersten Blick, so alleinstehend, recht unlogisch und ist es eigentlich auch, da in diesem Fall keine Abbruchbedingung gegeben ist. Aus diesem Grund sehen wir uns eine Schleife mit Abbruchbedingung an.

Bps.: 9Hier stehen die Details

%DB:
quadrat_von(Zahl) :- 
            Zahl =:= 16.           
quadrat_von(Zahl) :-
            Quadrat is (Zahl * Zahl),
            quadrat_von(Quadrat).


Wir sehen uns zunächst an, was bei der Anfrage quadrat_von(16). geschieht. Prolog prüft die erste Regel namens quadrat_von/1. Diese gilt, wenn die übergebene Variable dem Wert 16 entspricht. Es ist zu beachten, dass der Vergleichsoperator =:= ausschließlich für Zahlenwerte funktioniert und == für Textvergleiche. Da der übergebene Variablenwert dem Vergleichswert entspricht, ist die Beweisführung beendet und Prolog endet mit "Yes.

Das Prinzip einer Schleife mit Abbruchbedingung in Prolog (Oder - Baum).

Nun überprüfen wir den den Aufruf: quadrat_von(2). Hierbei wissen wir, dass die Beweisführung mittels des ersten Prädikats fehlschlagen wird, da der Inhalt der Variable Zahl gleich 2 ist und dementsprechend nicht 16 entspricht. Als nächstes versucht Prolog die Beweisführung mittels des zweiten Prädikats. Wir wissen, dass die Variable Zahl noch immer den Wert 2 beinhaltet. Es wird eine neue Variable Quadrat erstellt, welcher das rechnerische Ergebnis von (Zahl * Zahl) zugewiesen wird. Somit ist der Inhalt von Quadrat 4. Da hinter der eben beschriebenen Zeile ein Komma (Und) steht, wird diese ebenfalls beachtet. Das Prädikat quadrat_von/1 mit dem Variablenwert 4 wird aufgerufen. Sollte diese beweisbar sein, ist auch unser Aufruf bewiesen, da dieser genau dann gilt. Abermals wird die Bedingung des ersten Prädikats nicht erfüllt und Prolog bedient sich des zweiten. Sie sehen, wir befinden und im zweiten Umlauf der Schleife. Im zweiten Prädikat wird erneut das Quadrat der Zahl (jetzt 4) gebildet und quadrat_von/1 ruft sich mit dem neuen Wert selbst auf. Da die nun übergebene Zahl 16 ist, besteht das erste Prädikat die Abbruchbedingung (ist erfüllt) und Prolog liefert uns ein Yes. zurück.

Anhand des Baumes der nebenanstehenden Grafik ist die Art der Suche wiedererkennbar. Prolog prüft stets von oben nach unten und von links nach rechts.

Probieren Sie beschriebenes Beispiel aus und überprüfen es ebenfalls mit quadrat_von(4). und quadrat_von(3) aus. Sie werden feststellen, dass Ersteres beweisbar ist und zweiteres nicht.