Computerlinguistik II, WS 2005/06 Aufgabenblatt 2 -------------------------------------------------------------- Abgabe: Mi,16.11.05 (vor der CL-II-Stunde) Nachtrag vom Aufgabenblatt 1: Aufgabe 1: (Flexionsprogramm für Nomen im Deutschen) --------- c) Schreiben Sie ein Deklinationsprogramm für ein Stammformenlexikon: 1. Geben Sie den Deklinationsklassen, nach denen die Beispiele 'Planet' und 'Mond' dekliniert werden, einen Namen und geben Sie die Endungstabellen als Prädikat deklination(+Deklinationsklasse,+Formmerkmale,-Endung) an. 2. Schreiben Sie damit ein Programm dekliniere(+Deklinationsklasse,+Stammform,+Formmerkmale,-Vollform) das die Vollform aus der Stammform und der passenden Endung zusammensetzt. 3. Geben Sie --analog zu flexion_slex:verbflexion/2-- ein Programm nomenflexion(Deklinationsklasse,Stammform) an, daß ein in seiner Stammform eingegebenes Nomen entsprechend der angegebenen Deklinationsklasse in alle Vollformen setzt und diese am Bildschirm ausgibt. Wer noch keine Erfahrung mit Prolog hat, sollte die Programme (analog zu den in der Vorlesung behandelten Beispielen zur Verbflexion) schreiben, ohne sie in Prolog zu testen. Wer Prolog schon benutzt hat, sollte seine Programme an den beiden Beispielwörtern auch testen. Punkte 3 Aufgabe 3: --------- Man schreibe mit einem Programm showTree(+Baum) einen in der Form Baum = [Wurzel,Teilbaum.1,...,Teilbaum.k] gegebenen Baum (mit Prolog-Term als Wurzel) so formatiert, dass nach der Wurzel die Teilbäume, um 3 Leerzeichen eingerückt, untereinander ausgegeben werden: Wurzel Teilbaum.1 Teilbaum.1.1 ... Teilbaum.1.n1 Teilbaum.2 Teilbaum.2.1 ... ... Teilbaum.k ... Die Teilbäume eines Teilbaums sollen relativ zu seiner Wurzel ebenso eingerückt werden. Hinweise: (a) Benutzen Sie das Prolog-Prädikat tab/1 zum Einrücken: z.B. ?- write(a),tab(3),write(b). a b (b) Zum Addieren der Einrückungstiefen benutze man, dass Prolog eine Variable K mit dem Zahlenwert von M + N belegt, wenn (i) M und N durch Zahlen belegt sind, und (ii) ?- K is M + N (nicht: ?- K = M + N) benutzt wird. (c) Am besten schreiben Sie zwei Prädikate, die sich gegenseitig aufrufen: (i) showTree(+Baum,+Einrückungstiefe) (ii) showTrees(+Baumliste,+Einrückungstiefe) und definieren dann (ii) showTree(Baum) :- showTree(Baum,0). Die Wurzel eines Baums schreiben Sie einfach mit write/1. Geben Sie Ihr Programm und seine Ausgabe für folgende Eingabe an: Baum: [np(mask), [det(neut),[das]], [ap,[a,[kurze]]], [n(neut),['Programm']]] Einrückungstiefe: 5 Punkte 6 Bem. Diejenigen, die noch kein Prolog hatten, sollten Ihre Vorstellung, welche Schritte das Programm (in welcher Reihenfolge) machen sollte, zumindest in Worten formulieren. (Erinnnern Sie mich am Montag in der Prolog-Stunde daran, dass wir ein Programm mit solchen Bäumen schreiben.)