1: Fakten, Regeln

Prolog (aus dem franz. Programming en Logique) ist eine logische Programmiersprache, die in den 1970er Jahren von dem Informatiker Alain Colmerauer entwickelt wurde. Der Ursprung der logischen Programmierung liegt in dem automatisierten Beweisen mathematischer Sätze. Die logische Programmierung basiert auf der Syntax der Prädikatenlogik erster Stufe (PL1), die in der zweiten Hälfte des 19. Jahrhunderts […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

2: Matching

Prolog versucht Anfragen mittels Klauseln (Fakten und Regeln) einer Wissensbasis logisch abzuleiten bzw. zu beweisen. Dabei wird geprüft ob das Ziel einer Anfrage (die Zielklausel) eine logische Konsequenz der Programmklauseln (Wissensbasis) ist bzw. ob sich eine Anfrage des Benutzers gegeben als Zielklausel auf Grundlage der Programmklauseln beweisen lässt. Das Prinzip wird automatische Beweisführung (proof search) […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

3: Rekursion

Ein wichtiges Konzept für das Lösen von Aufgaben bzw. für die Definition mächtiger Prädikate ist die Rekursion. Ein Prädikat ist rekursiv definiert, wenn in einer der definierenden Regeln das Prädikat im Regelkörper aufgerufen wird. Rekursion ist eine Problemlösungsstrategie. Die Grundidee ist das Zurückführen einer allgemeinen Aufgabe auf eine einfachere Aufgabe derselben Klasse (Schleifen). Rekursion ermöglicht […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

4: Listen

Listen sind sehr mächtige Datenstrukturen in Prolog. Listen sind endliche Sequenzen von Elementen: Listen können verschachtelt sein (Listen können Listen als Elemente haben) Die Reihenfolge der Elemente ist wichtig [a,b,c] = [b,a,c] (Unterschied zu Mengen). Dasselbe Element kann mehrfach in einer Liste vorkommen (Unterschied zu Mengen). Listenzerlegung in Prolog Prolog hat einen eingebauten Operator ‘|’ […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

5: Arithmetik

Die meisten Prologimplementierungen stellen Operatoren zur Verarbeitung von Zahlen zur Verfügung. Hierzu gehören die arithmetischen Operatoren + (Addition), – (Subtraktion), * (Multiplikation), / (Division), // (ganzzahlige Division), mod (modulo) und ^ (Exponent). Alle Operatoren können auch als Funktoren verwendet werden: Statt 3+4 kann man auch +(3,4) schreiben. Die verwendeten Symbole für die Operatoren hängen von […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

6: Listenprädikate

Vier Prädikate zur rekursiven Listenverarbeitung demonstrieren Basistechniken für beliebig komplexe Operationen auf Listen: append/3 deklarativ Die Konkatenation einer Liste L an die leere Liste liefert L als Ergebnis. Wenn die Konkatenation der Listen L1 und L2 die Liste L3 ergibt, dann ergibt die Konkatenation der um ein zusätzliches Kopfelement H erweiterten List L1 mit L2 […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

7: DCGs

Eine formale Grammatik besteht aus einem Alphabet von Terminalsymbolen Σ (den Symbolen der beschriebenen Sprache) einer Menge von Nichtterminalsymbolen N (unseren Hilfssymbolen) einem Startsymbol S ∈ N einer Menge von Regeln der Form α → β, wobei α und β Ketten von Symbolen aus Σ ∪ N sind. Grammatiken sind endliche Regelsysteme. Die Menge aller […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

8: param. DCGs

Erweiterung unserer DCG um Plurale Bei der Erweiterung um Plurale steigt die Zahl der Regeln, werden Regeln schwerer lesbar, gehen Generalisierungen verloren. DCG Regeln können mit zusätzlichen Parametern oder Merkmalen angereichert werden. Ausweg: parametrisierte DCGs Zeile 2: NP und VP müssen im Numerus übereinstimmen. Zeile 3: der Numerus der NP wird bestimmt von dem Numerus […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

9: Terme

Vergleich von Termen Der Gleichheitsoperator für Terme „==“ vergleicht zwei Terme auf Gleichheit. Der Ungleichheitsoperator für Terme „==“ gelingt genau dann, wenn „==“ nicht gelingt. Übersicht Matching- und Vergleichsoperatoren Operator Negation Vergleichstyp = \= Unifikation =:= =\= arithmetische Gleichheit == \== Termgleichheit Analyse von nicht zusammengesetzten Termen Mit den folgenden eingebauten Prädikaten kann man den […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

10: Cut, Negation

Das Prädikat fail/0 Das Prädikat fail/0 scheitert immer. Es erzwingt Backtracking und kann zur Ausgabe aller Lösungen eingesetzt werden: Umgang mit dem Cut Schattenseiten des Cuts Der Cut zerstört die Deklarativität von Prolog-Programmen. Die Interpretation einer Prädikatsdefinition mit roten Cuts ist i.d.R. nur noch unter Berücksichtigung der Reihenfolge der Beweisschritte möglich. Deshalb: Cut nur einsetzen, […]

Weiterlesen Folien ansehen Musterlösungen herunterladen

11/12: weitere Prädikate

Manipulation der Wissensbasis Prolog stellt Prädikate zur Verfügung, die eine Manipulation der Wissensbasis während der Laufzeit eines Programms ermöglichen: assert/1, (asserta/1, assertz/1), retract/1, retractall/1 Beispiel: Im Prinzip ist es mit den Manipulationsprädikaten möglich, direkt von der Konsole zu programmieren: Dies ist jedoch nur selten eine gute Idee, da sie genau aufpassen müssen, in welcher Reihenfolge […]

Weiterlesen Folien ansehen Musterlösungen herunterladen