Prolog

Ein Prolog-Programm setzt sich aus Klauseln zusammen. Klauseln sind dabei einzelne Aussagen bzw. Aussageformen (Aussagen mit Variablen). Ein Prolog-Programm versucht nun, zu einem vorgegebenen Problem passende Klauseln zu finden und diese zu einer Lösung zu kombinieren. Es entsteht dabei eine Art Schlusskette, wie man sie aus math. Beweisen kennt.
Prolog kann nach gewissen Regeln selbständig neue Klauseln erzeugen. Hierdurch wird ein Programm lernfähig. Viele Aufgaben lassen sich in Prolog sehr effektiv programmieren, so benötigt man für ein einfaches Expertensystem gerade 5 Zeilen.
Die Reihenfolge, in der die Klauseln auf Verwendbarkeit getestet werden, wird durch die Anordnung der Klauseln im Programmtext bestimmt. Dies schränkt die Flexibilität des Programms deutlich ein.

Beispiel (Adressendatei): Zu einem Namen N soll ein Zusatztext erfasst werden. Beide Bestandteile werden in Klauseln dat(N,Z) gespeichert, die vom Programm erzeugt wird. Das Programm selbst besteht aus zwei Klauseln daten(N), wobei die Variable N für einen Namen steht. Aufgerufen wird das Programm durch Eingabe von daten(N), wobei N durch einen konkreten Namen ersetzt wird.

ProgrammFunktion
daten(N):-clause(dat(N,Z),true),write(N),nl,write(Z),nl. claus testet, ob eine Klausel mit dem vorgegebenen Namen N existiert.
Falls ja, wird N zusammen mit dem Text Z ausgegeben.
Falls nein, wird die folgende Klausel aufgerufen.
nl bewirkt dabei einen Zeilenvorschub.
daten(N):-write(N),write('Text:'),readln(Z),asserta(dat(X,Z)). N wird ausgegeben und der zugehörige Text Z erfragt.
asserta erweitert das Programm um eine neue Klausel dat(N,T).

Um die Anordnung der Klauseln autonom variieren zu lassen, könnte man die Häufigkeit bestimmen, mit der die Klauseln bei verschiedenen Programmaufrufen benutzt werden, und sie dann entsprechend umsortieren. Dies ist nicht bei allen Klauseln sinnvoll, wie das obige Beispiel zeigt. Für einfache Fälle haben wir das Verfahren im Unterricht ausprobiert - allerdings nicht in Prolog - und erreichten dabei interessante Ergebnisse.

Prolog-Kurs

[29.6.2023]