% Einfuehrung in das Symbolische Programmieren CIS, SS 2006, H.Leiss % ===================================================================== % Abgabe: Am Montag, 8.4.06 durch die Abgabemaske, die noch in die Kursseite eingebaut wird. % ------------------------------------------------------------ % Aufgabe 1. % --------- % Verallgemeinern Sie das Beispiel 1.4 der Vorlesungsfolien ueber die % Regeln zur Pruefungszulassung in der Zwischenpruefung zum Hauptfach % Computerlinguistik so, dass es fuer mehrere Studenten benutzt werden % kann. % % Das hatten wir heute morgen begonnen, mit etwas verkuerzten Namen fuer % die Grundpraedikate, die auf Variable X (fuer unbekannte Studenten) % angewendet werden: zwCL_zugelassen(X) :- matheSchein(X), lingSchein(X), clSchein(X). matheSchein(X) :- mathe1(X). matheSchein(X) :- mathe2(X). matheSchein(X) :- automaten(X). matheSchein(X) :- statistik(X). clSchein(X) :- cl1(X), cl2(X). lingSchein(X) :- syntax(X) ; morpho(X) ; semantik(X). % i) Vier Studenten Anna, Bernd, Clara und Dieter sollen folgende % Bedingungen erfuellen: % % (1) Anna hat die CL-Scheine. % (2) Bern hat den Mathe-1-Schein und den CL-1-Schein. % (3) Clara hat alle Linguistik-Scheine und den Statistik-Schein. % (4) Dieter hat den CL-1-Schein und den Syntax-Schein. % % Schreiben Sie die Aussagen (1) - (4) als Datalog-Fakten (mit % anna fuer Anna usw.). (Ohne zu sagen, wer welche Scheine NICHT hat.) % ii) 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/1" 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. % % Sie sollen dann nach Laden des Programms auf die Frage ?- mathe1(clara). % die Antwort 'No' erhalten, und keine Fehlermeldung. % iii) Ueberlegen Sie sich, wie der Suchbaum fuer die Frage % ?- zwCL_zugelassen(bernd). % aussieht. [Es ist etwas muehsam, den Baum durch Tippen darzustellen, % weshalb Sie das nicht abgeben müssen. Aber: wenn Sie den Suchbaum % nicht mit Papier und Bleistift malen können, stellen Sie eine Frage % in der Uebungsstunde! % iv) Durch welche Datalog-Regeln kann man folgende Bedingungen ausdruecken: % % (5) Anna hat jeden der 4 Mathe-Scheine, den Bernd oder Clara hat. % (6) Wenn Clara und Dieter einen Linguistik-Schein haben, dann hat % auch Bernd einen Linguistik-Schein. % v) Laden Sie das um (1)-(6) erweiterte Programm. Wie lautet die Prolog- % Formulierung der Frage "Wer hat einen Linguistik-Schein?", und welche % Antworten findet Prolog? % % Prolog: X = erste_Antwort Benutzer: ; (= naechste Antwort anfordern.) % vi) Überlegen Sie sich, wie der Suchbaum für diese Frage aussieht, damit wir % das in der kommenden Übungsstunde diskutieren können. % Bem.: Numerieren Sie die Programm-Klauseln und schreiben Sie an die Zweige % des Suchbaums die Nummer der jeweiligen Klausel (damit der Baum lesbar % bleibt. % Bemerkung: Wer SWI-Prolog unter Windows installiert hat, kann es mit % plwin.exe oder plcon.exe starten (mit eigenem Fester oder in einer % DOS-Box). Das Hilfesystem von Prolog sagt dazu: % The file-extension .pl is associated with the program plwin.exe. % Opening a .pl file will cause plwin.exe to start, change directory % to the directory in which the file-to-open resides and load this % file. % Man kann also SWI-Prolog starten, indem man eine .pl-Datei anklickt. % Daher ist es guenstiger, die Dateinamen mit .pl statt mit .pro enden % zu lassen. (Am besten testet das mal einer der Windows-Benutzer, ob % das noch so geht.)