SDA SE Wiki

Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering

User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

research:jtransformer:prologprogramm [2018/05/09 01:59] (current)
Line 1: Line 1:
 +
 +=== Ein Prolog Programm ===
 +
 +
 +Hier wird anhand eines einfachen Beispiels verdeutlicht,​ wie ein Prolog-Programm grundsätzlicch aufgebaut ist.
 +
 +
 +
 +Ein Prolog-Programm ist nicht wie ein imperatives Programm aufgebaut. So spielt z.B. Reihenfolge (fast) keine Rolle.
 +
 +
 +
 +''​mann(anton).\\ ​
 +mann(hugo).\\ ​
 +mann(sascha).\\ ​
 +mann(paul).\\ \\ 
 +frau(anne).\\ ​
 +frau(silke).\\ ​
 +frau(jennifer).''​
 +
 +
 +
 +Hierbei werden **Fakten** konstatiert,​ nämlich, das anton, hugo, paul und sascha männer sind, und anne, silke und jennifer Frauen. Diese Fakten gelten auf jeden Fall, und unabhängig voneinander. Anders gesagt: Die Tatsache das anton ein Mann ist, spielt keine Rolle dafür, ob hugo einer ist. 
 +
 +
 +
 +''​verliebt(anton,​ silke).''​
 +
 +
 +
 +Hier haben wir ein Fakt etwas anderer Form. Fakten geben an, das Relationen erfüllt sind für ein Tupel. So erfüllt das Paar anton, silke die Relation "​verliebt"​.
 +
 +
 +
 +''​gutaussehend(anne).\\ ​
 +gutaussehend(sascha).\\ \\ 
 +verliebt(paul,​ X).''​
 +
 +
 +
 +Dieser Fakt enthält eine Variable. Das bedeutet, das für alle X paul in diese Person verliebt ist (selbst männer und sich selbst!). Da die Variable nie wieder vorkommt kann (und wird man) sie typischerweise durch ein _ ersetzen, das aussagt "Hier steht eine Variable, die aber für mich uninteressant ist".
 +
 +
 +
 +''​verliebt(X,​Y) :- gutaussehend(X),​ gutaussehend(Y),​ mann(X), frau(Y).''​
 +
 +
 +
 +Hier treffen wir auf eine Regel. Eine Regel gibt an, das eine Relation immer dann erfüllt ist, wenn die rechts vom :- (was man normalerweise als <= lesen kann) stehenden aussagen wahr sind (die Relationen gelten). In diesem Fall gilt: Alle gutaussehenden Männer sind in alle gutaussehenden Frauen verliebt. (Genau wie im echten Leben? ;) )
 +
 +
 +
 +Nun können wir Anfragen stellen, indem wir die Datei in der wir diese Fakten und Regeln abgespeichert haben in Prolog laden (mittels ''​consult(dateiname).''​).
 +
 +
 +
 +Eine mögliche anfrage wäre z.B. ''​verliebt(sasha,​ anne).'',​ was von Prolog mit ''​yes''​ beantwortet wird, denn Sascha und Anne sind beide gutaussehend,​ und Sasha ein aann und anne eine Frau. Aber wieso antworter Prolog auf ''​verliebt(sascha,​ Anne).''​ mit ''​Anne = anne''?​ Weil Anne eine Variable ist, und wir somit fragen "Für welche belegungen von Anne ist sascha darin verliebt?"​.
 +
 +
 +
 +Wenn wir die Anfrage ''​verliebt(paul,​ X).''​ starten würden, erhielten wir ein seltsames Ergebnis: ''​X = _G284 ;''​. Was hat es damit auf sich? Das ist Prolog'​s Art uns zu sagen, das für **jede** belegung der Variable die Relation erfüllt sein würde.
 +
 +
 +
 +Komplexere Regeln sind natürlich auch möglich, unter anderem auch mittels Rekursion definierte. Rekursion ist eines der Hauptwerkzeuge des Prolog-Programmierers.
 +
 +
 +
 +Wenn man in der Anfrage Variablen läßt, erhält man Belegungen (oder //​Bindungen//​) der Variablen, die die Anfrage erfüllen. Sollte man mit der erhaltenen Lösung nicht zufrieden sein kann man ; drücken, um Prolog nach weiteren Bindungen suchen zu lassen. Sehr schön dabei ist, das die Bindungsmuster normalerweise nicht vorgegeben sind. Wir können also verliebt(name1,​ name2) aufrufen, um zu prüfen ob name1 in name2 verliebt ist, verliebt(X, frau) um alle männer zu erhalten die in frau verliebt sind, verliebt(mann,​ X) um alle Frauen zu erhalten in die mann verliebt ist, und schließlich verliebt(X,​Y) um alle verliebten paare zu erhalten.
 +
  
research/jtransformer/prologprogramm.txt · Last modified: 2018/05/09 01:59 (external edit)

SEWiki, © 2019