/* Einfuehrung in das Symbolische Programmieren CIS, SS 2002, H.Leiss ===================================================================== Abgabe: Freitag, 3.5.02, in der Vorlesungsstunde (Raum 1.05) ------------------------------------------------------------ Aufgabe 1. --------- Das Beispiel 1.4 ueber die Regeln zur Pruefungszulassung in der Zwischenpruefung zum Hauptfach Computerlinguistik von den Folien hatten wir in der Uebungsstunde so verallgemeinert, dass es fuer mehrere Studenten benutzt werden kann. Dazu hatten wir die Namen der Aussagen in Kurzform geschrieben, z.B. wie "habeLinguistikschein" als "li", und dann als einstellige Praedikate benutzt, indem wir sie auf eine Variable X (fuer unbestimmte Studenten) angewendet hatten. Dann erhaelt man aus den Regeln des Beipiels die folgenden Regeln: */ ep(X) :- cl1(X), cl2(X), li(X), ma(X). li(X) :- sy(X). li(X) :- mo(X). li(X) :- se(X). ma(X) :- ma1(X); ma2(X); au(X); st(X). % Vier Studenten a, b, c und d sollen folgende Bedingungen erfuellen: cl1(a). cl1(b). cl1(d). ma1(a). ma1(d). ma2(c). ma2(d). cl2(a). cl2(b). cl2(d). se(c). se(d). sy(a). sy(b). sy(d). /* Teil 1 der Aufgabe: Bevor Sie dieses Programm in Prolog laden, geben Sie in Prolog folgendes Ziel ein: ?- current_prolog_flag(unknown,Flag). Sie erhalten eine der folgenden drei Antworten: a) Flag = error, b) Flag = warning, c) Flag = fail. Falls Sie die Antwort a) oder b) erhalten, geben Sie ein: ?- set_prolog_flag(unknown,fail). Damit sagen wir Prolog, dass es "p(X) :- fail." annehmen soll, wenn es zu "p" keine Klausel im Programm findet. Ausserdem unterdruecken wir die bei a) bzw. b) erzeugte Fehlermeldung bzw. die Warnung, dass Prolog das Praedikat "p" nicht kennt. Bei der Antwort c) brauchen Sie nichts zu tun. Teil 2 der Aufgabe: Uberlegen Sie sich, welcher der Studenten a,b,c,d die Pruefungsvoraussetzungen, d.h. die Bedingung ep(X), erfuellt. Geben Sie fuer jeden Studenten, der ep(X) erfuellt, eine Begruendung dafuer an, d.h. eine (moeglichst kleine) Liste von Scheinen, die seine Zulassung zur Pruefung rechtfertigen. Teil 3 der Aufgabe: Laden Sie das Programm in Prolog und stellen Sie fest, welche der Aussagen ep(a), ep(b), ep(c) bzw. ep(d) Prolog beweisen kann. Aufgabe 2: --------- Betrache das PROPLOG-Programm mit den 8 Klauseln 1. p :- q, fail. 2. p :- q, s. 3. q :- t, u. 4. s :- t. 5. t. 6. t :- v. 7. u. 8. v. und die Anfrage ?- p. Schreibe den vollstaendigen Suchbaum auf, der die Beantwortung durch den PROPLOG-Interpreter darstellt. An den Knoten des Baums stehen die jeweiligen Ziele, an den Kanten die Regeln, die vom oberen zum unteren Ziel fuehrt. Die Wurzel des Baums (oben) sei mit 1 numeriert, also 1 : [p]. Schreiben Sie an die Zweige die Klausel des Programms (oder ihre Nummer), die beim Uebergang von einem Knoten "n:Ziele" zum Knoten "n+1:Neue Ziele" benutzt wird. Numerieren Sie die Knoten des Baums in der Reihenfolge, wie sie bei der Beweissuche (durch provable(goal)) durchlaufen werden. Bemerkung: --------- Sie koennen im Emacs unter dem Menue Options den Punkt "Syntax Highlighting" anklicken; dann sollte die Prolog-Datei das Programm mit verschiedenen Farben fuer Kommentare, Variable, Kopf und Rumpf von Klauseln darstellen. (Das zeige ich auch noch im Kurs.) */