Programmieren in Logik Prolog Programmieren in Logik 3. Rekursion GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Inhalt - Programmstruktur • Einführung • Beispiel 1 • Beispiel 2 • Zusammenfassung GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Einführung GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 3 Es soll der Begriff "Vorfahr" definiert werden. Schon einem kleinen Kind kann dieser Begriff schnell erklärt werden: Vorfahren sind die Eltern, Großeltern, Urgroßeltern, Ururgroßeltern, Urururgroßeltern usw. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 3 In PROLOG: grosseltern(X,V):- eltern(X,E), eltern(E,V). urgrosseltern(X,V):- eltern(X,E), grosseltern(E,V). ururgrosseltern(X,V) :- eltern(X,E), urgrosseltern(E,V. Schwierig ist die Verallgemeinerung - PROLOG kann mit "usw." nichts anfangen. Aber das Schema wird klar. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 3 In PROLOG werden solche Prädikate rekursiv definiert; also etwa so: Vorfahren von X sind die Eltern von X und die Vorfahren der Eltern von X. vorfahr(X,V) :- eltern(X,V). vorfahr(X,V) :- eltern(X,E), vorfahr(E,V). Das Prädikat wird also teilweise durch sich selbst erklärt. Die erste Klausel ist nicht-rekursiv und sorgt für die Terminierung, die zweite Klausel enthält den rekursiven Aufruf. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 3 Wie arbeit Prolog bei einem rekursiven Prädikat? GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Aufgaben Lösen Sie die Aufgaben 9 und 10. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 4 Gegeben ist folgende Hierarchie von Weisungsbefugten in einer Firma: In der Firma gilt die Regel: der Weisungsbefugte eines Weisungsbefugten ist weisungsbefugt. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 4 Ein PROLOG-Programm könnte so aussehen: weisungsbefugt(blau,argmann). weisungsbefugt(banaus,argmann). weisungsbefugt(clar,blau). weisungsbefugt(clon,blau). weisungsbefugt(clauer,blau). weisungsbefugt(calauer,banaus). weisungsbefugt(dorkel,clar). weisungsbefugt(dorkel,clon). weisungsbefugt(darb,calauer). weisungsbefugt(dreggler,calauer). weisungsbefugt(X,Y):- weisungsbefugt(X,Z), weisungsbefugt(Z,Y). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 4 Folgende Fragen werden gestellt: ?- weisungsbefugt(banaus,argmann). ?- weisungsbefugt(darb,banaus). ?- weisungsbefugt(argmann,Y). Warum antwortet das PROLOG-System bei der dritten Frage nicht? (-> trace) GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 4 zunächst werden die Fakten probiert; dies misslingt dann wird die Regel probiert; dabei wird versucht, die Teilziele auf der rechten Seite zu erfüllen dies gelingt mit dem ersten Teilziel; dies ist aber nichts anderes als die ursprüngliche Anfrage das Spiel beginnt von vorne => Endlosschleife GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 4a Lösungsidee: zwischen direkten Weisungsbefugten und Weisungsbefugten unterscheiden. dir_weisungsbefugter(blau,argmann). . . . dir_weisungsbefugter(dreggler,calauer). weisungsbefugter(X,Y) :- dir_weisungsbefugter(X,Y). weisungsbefugter(X,Y) :- dir_weisungsbefugter(X,Z), weisungsbefugter(Z,Y). GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Beispiel 4a Bei der letzten Regel kommt es auf die Reihenfolge der Teilziele auf der rechten Seite an. Die Regel: weisungsbefugter(X,Y):- weisungsbefugter(Z,Y), dir_weisungsbefugter(X,Z). ist zwar logisch gleichwertig aber prozedural falsch. Sie kann zu Endlosschleifen führen. Warum? GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Zusammenfassung Ein Problem rekursiv lösen heißt, es auf eine einfachere Version seiner selbst zurückzuführen. Dieses Zurückführen geschieht solange, bis ein unmittelbar lösbarer Anfang, der Rekursionsanfang, erreicht ist. Eine Regel heißt rekursiv, wenn das Prädikat des Regelkopfes auch im Regelkörper vorkommt. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz
Aufgaben Lösen Sie die Aufgaben 8 bis 10 im Arbeitsbuch Prolog Seite 24. GK Info 13 (Hö) PROLOG – Eine Sprache der Künstlichen Intelligenz