Prolog – die Sprache

ja, irgendwann packt einen mal das Programmierfieber, wenn man total begeistert von irgendwas ist.
In der letzten Info-Vorlesung hat unser Prof mal Prolog vorgestellt.
Dies ist, im Gegensatz zu den meisten Programmiersprachen, welche Imperativ, Objektorientiert und sonst so aufgebaut sind, eine LOGISCHE Programmiersprache.
Das heißt: man kümmert sich nicht um die Lösung des Problems, sondern nur um die Formulierung dieses. Lösen tut es dann Prolog. Sehr nützlich für KI Entwicklung und zum Beispiel in der Wirtschaft, um Planungsprobleme zu lösen wo man eine definierte Ausganssituation hat, Randbedinungen und letztendlich das Problem (27 Bauarbeiter, 3 Baustellen, 5 LKWs, ein bisschen Regen und so und soviel Sand zu schaufeln).
Habe mal eine kleine Zusammenfassung geschrieben:

aufbau prolog:
– Basiert auf (mathematischer) Prädikatenlogik.
– Datenbasis.
– Nutzer formuliert Anfragen an Datenbasis. Positives Resultat: Anfrage logisch ableitbar. Negatives Resultat: Mit der vorhandenen Datenbasis keine Antwort ableitbar.
– Prolog benutzt (vom User eingegebene) Fakten und Regeln um Anfrage zu beantworten.
– Geeignet um z.B. Logik-Rätsel zu lösen.
– In der Wirtschaft: Systemmanagement, Künstliche Intelligenz.

Es wird unterschieden zwischen „Faktum“ und „Token“:
Token sind Variablen (werden GROß geschrieben)
Faktum ein „Datensatz“ z.B. mann(dieter). (Logisch: Dieter ist ein Mann).
Anderes Faktum: mutter(eva, dieter).(Logisch: Eva ist eine Mutter von Dieter).

Was macht Prolog jetzt damit?
gibt man ein:
?- mann(dieter).
überprüft Prolog, ob mit der Datenbasis diese Aussage erfüllt werden kann.
(hier wäre die antwort
yes. (s. Datenbasis oben)
ein anderes Beispiel:
?- frau(eva).
Antwort wäre hier:
no.
Eva ist nur in „Mutter“.
Man kann allerdings fragen:
?- mutter(X, dieter)
was als Ergebnis
eva. liefern würde.
„X“ ist hier Token, also eine Variable. Prolog durchsucht Basis nach Datensatz der Aussage „VARIABLE ist Mutter von dieter“.

Als letztes noch 2 Beispiele für die oben erwähnten „Regeln“ die der User aufstellen kann (damit es richtig interessant wird).
Wir wollen aus einer Datenbasis alle Personen, die Großvater sind abfragen können, bzw. wissen, wer einen Großvater hat.
grossvater(X, Y):-
vater(X, Z),
vater(Z, Y).

Was steht da?
Logisch übersetzt:
„X“ ist „grossvater“ von „Y“ wenn („:-„) „X“ ein „vater“ von „Z“ ist, und („,“) „Z“ ein „vater“ von „Y“.

Da allerdings auch mütterlicherseits ein Grossvater existieren kann, müssen die Regeln auch für die Mutter gelten:

grossvater(X, Y):-
vater(X, Z),
mutter(Z, Y).

Hier ist wichtig, dass a) die Variablen beibehalten werden (ist ja LOGISCH, oder?) und b) dass „grossvater“ jeweils der „vater“ von der „mutter“ bzw. „vater“ ist.

Hier ist die Datenbasis:

mann(adam).
mann(tobias).
mann(frank).
frau(eva).
frau(daniela).
frau(ulrike).
vater(adam,tobias).
vater(tobias,frank).
vater(tobias,ulrike).
mutter(eva,tobias).
mutter(daniela,frank).
mutter(daniela,ulrike).

Eine Anfrage könnte jetzt wie folgt aussehn:

?- grossvater(adam, ulrike).

Dies prüft, ob „adam“ der grossvater von „ulrike“ ist.
Die antwort (bezogen auf obige Datenbasis) ist yes.

?- grossvater(X, frank).

liefert als Ergebnis X=adam, d.h. Adam ist ein großvater von Frank.

Wer mehr wissen möchte, einfach mal
http://de.wikipedia.org/wiki/Prolog anschaun. Dort gibt es auch Links und ein Wikibook zu Prolog:
http://de.wikibooks.org/wiki/Prolog

Viel Spaß beim Logiken!

P.S.: Freue mich über Kommentare zu Prolog, Anlaufstellen, Tipps, Rätsel zum Lösen usw! Mal nen bisschen Leben auf diesen Blog bekommen ;)

Advertisements

2 Kommentare

Eingeordnet unter diverses

2 Antworten zu “Prolog – die Sprache

  1. Oh je, das erinnert mich irgendwie an das Fach „Theoretische Informatik“. Zum Glück habe ich als praktischer Informatiker mit so einem Gebilde schon abgeschlossen und kann mich ganz den modernen Sprachen widmen ;-).

  2. Pingback: coding and knitting « kopfueber

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s