Einführung in das Symbolische Programmieren
mit PROLOG
              
Vorlesung mit Tafelübung
CIS, WS 2012/13

Hans Leiß

Organisatorisches

Vorlesung Di, 16-18 Raum L155, Oettingenstr.67
Tafelübung Do, 16-18 Raum L155, Oettingenstr.67
Mentorenstunde Di, 13-14 Raum C 110, Oettingenstr.67
Hausaufgabenhilfe Mo, 12-14 Raum BU102 (Kalahari), Oettingenstr.67
Fragen Sie während der Vorlesung und der Tafelübung, wenn Sie etwas nicht verstehen! Kommen Sie in die Mentorenstunde, wenn Sie eine längere Frage oder ein größeres Verständnisproblem haben. Sie können auch eine Email an die Tutorin und mich schicken, um etwas zu klären.

Vorlesungsfolien

Die Folien der Vorlesung werden hier im Lauf des Semesters als .pdf-Datei (vom Apr 12, 2013 ) zur Verfügung gestellt. Bis auf kleinere Änderungen werden es dieselben Beamer-Folien wie im WiSe 2011/12 sein .pdf-Datei 2011 , bzw. wie Folien im Format DinA4 vom SoSe 2009. Sie können sich die also vorher ausdrucken und sich in der Vorlesung Notizen darauf machen.

Tafelübung/Übungsaufgaben

Es werden möglichst jede Woche Übungsaufgaben gestellt, die Sie allein oder in einer 2-er Gruppe lösen sollten. Die abgegebenen Lösungen werden von der Tutorin korrigiert. In der Tafelübung wird eine korrekte Lösung am Rechner oder an der Tafel erklärt, Fragen zur Vorlesung geklärt und weitere Beispiele behandelt. (Abgabemodus: über die Abgabemaske auf dieser Seite unten)
Nach der Studienordnung wird bei der Prüfung (Klausur) nur die Leistung in der Prüfung bewertet. Sie müssen aber unbedingt die Hausaufgaben bearbeiten: eine Programmiersprache kann man nur erlernen, indem man selbst Programme schreibt und testet - die manchmal mühsame Fehlersuche gehört dazu!
  1. Aufgabe 1-2, Abgabe Do, 1.11.2012 (trotz Feiertag).
    Bemerkung: Manche Versionen von SWI geben statt More ? bei Aufgabe 2 c) nur die Antwort (hier: true), ohne zum Prompt ?- zurückzukehren. Geben Sie nach dem true nicht return, sondern ? ein, und schauen Sie sich die angebotenen Möglichkeiten an.
  2. Aufgabe 3+4, Abgabe Do, 15.11.2012 (Aufgabe 4 nachgereicht, Sa 10.11., 20 Uhr)
    Die in der Stunde vom 15.11.2012 ausgeteilte Musterlösung enthielt einen Tippfehler bei nachkomme/2 und wegen LaTeX-Problemen falsche Beschriftungen im dargestellten Suchbaum. Das ist auf dem Lösungsblatt 2 korrigiert.
  3. Aufgabe 3.1-3.3, Abgabe Do, 22.11.2012 und Lösungsblatt 3
  4. Aufgabe 4.1, 4.2, Abgabe Do, 29.11.2012 und Lösungsblatt 4
  5. Aufgabe 5.1, 5.2, Abgabe Do, 6.12.2012 und Lösungsblatt 5
  6. Aufgabe 6.1, 6.2, Abgabe Do, 13.12.2012 und Lösungsblatt 6
  7. Aufgabe 7.1 - 7.3, Abgabe Do, 20.12.2012 und Lösung zu Aufgabe 7.2. automat.pl (ein ! in copy/3 ergänzt) und Lösungsblatt 7
  8. Aufgabe 8.1 - 8.2, Abgabe Do, 17.01.2013 mit tokenizer.pl und Lösungsblatt 8 (Vielleicht kommt noch eine kuerzere Loesung zu 8.2.)
  9. Aufgabe 9.1, Abgabe Do, 24.01.2013 und Lösungsblatt 9
  10. Aufgabe 10.1 und Lösungsblatt 10 (für eine ähnliche Aufgabe)
Hier ist ein Programm zur Darstellung der Suchbäume (Änderung eines Programms von P. Flach). graphviz_hl.pl Wenn dot und gv (ghostview) installiert sind und man graphviz_hl.pl in Prolog geladen hat, wird (unter Linux) durch ?- why(Goal) der Suchbaum für Goal graphisch angezeigt. Entsprechend wird durch ?- show(Term). ein Term graphisch als Baum dargestellt.
Durch why2(Goal) kann man sich den Suchbaum von Goal einschließlich der Substitutionen an den Kanten anzeigen lassen, und mit why2(Goal,Zahl) diesen Suchbaum bis zur Tiefe Zahl, d.h. die Äste werden bei der Tiefe Zahl abgeschnitten. Da die Suchbäume schnell sehr groß werden, kann man so wenigstens noch einen Teil sehen. (Wenn man die Bäume mit gv und einem Skalierungsfaktor anzeigen läßt, fehlen manchmal Teile des Baums.)
Abgabe Ihrer Lösung (aller Aufgaben eines Aufgabenblatts zusammen, Backslash und Anführungszeichen mit Backslash schützen) über diese Eingabemaske

Modulprüfung

Am Semesterende findet eine Modulprüfung in Form einer Klausur statt. (Formal sind es zwei Prüfungen, eine für den Vorlesungsteil und eine für die Tafelübung. Für Studenten der Informatik ist nur der erste Teil erforderlich.) Dabei sollte man 60 Prozent der Aufgaben lösen können.
Klausurtermin: (Vorlesungsteil) Di, 5.2.2013, 16-18 Uhr, Raum L 155, Oettingenstr.67
Klausurtermin: (Übungsteil) Do, 7.2.2013, 16-18 Uhr, Raum L 155, Oettingenstr.67
Die Klausuren sind korrigiert, der Termin zur Einsicht in die Korrektur war wie angekündigt Fr, 15.2.2013. Die Noten der Klausur zur Übung sind vom Zweitgutachter bestätigt und sind ab jetzt im LSF sichtbar.
Die Noten ,,nicht bestanden'' der Klausur zur Vorlesung sind jetzt noch vom Zweitgutachter bestätigt worden (eine 5.0 wurde zu 4.0 verbessert). Die Frist zur Einsicht in die Korrekturen ist abgelaufen, und die Noten sind im LSF sichtbar (die Informatikstudierenden haben ihre Noten per Email erhalten).
Die Zweitprüfungen finden in der ersten Vorlesungswoche des Sommersemesters 2013, am Freitag, 19.4.2013, 14-16 (Vorlesungsteil) und 16-18 (Übungsteil) im Raum L 155, Oettingenstr.67, statt. Wer an einer Zweitprüfung teilnehmen will, muß mir vorher eine Email schicken; spätestens am 8.4.2013.
Da inzwischen die Wiederholungsklausur im LSF angelegt ist, reicht die obige Email (für Nicht-Informatiker) doch nicht, da die Prüfungsanmeldung durch die Teilnehmer selbst erfolgen muß. Bis Mi 17.4. muß sich jeder via LSF zur Zweitprüfung anmelden! (Alle, die mir eine Email geschickt hatten, hatte ich darüber per Email informiert.)
Versuchen Sie, den Kurs mit Hilfe der Vorlesungsfolien, Übungsaufgaben und Musterlösungen in den Semesterferien nachzuarbeiten! Das Programm graphviz_hl.pl habe ich etwas erweitert, damit why2(Goal) auch die Belegung bei Unifikationen richtig anzeigt. Sie können mit inhaltlichen Fragen auch in den Semesterferien in meine Mentorenstunde (Di 13-15) kommen. (Am besten vorher eine Email schicken, weil ich noch nicht weiß, wann ich im Urlaub bin.)
Für den Kurs Computerlinguistische Anwendungen im SoSe 2013 sind Prologkenntnisse unbedingt erforderlich.

Literatur

Außerdem findet man im Internet verschiedene Tutorien zu Prolog. Empfehlenswert ist http://www.learnprolognow.org.

PROLOG

Wir benutzen das SWI-Prolog von Jan Wielemaker, Version 5.6.47 oder neuer (mit der XPCE-Bedienoberfläche). Dazu gibt es eine WWW-Seite unter
http://www.swi-prolog.org/
wo man sich eine Kopie von SWI-Prolog besorgen kann, um es auf dem eigenen PC zu installieren. Auf dieser Seite findet man im Abschnitt Documentation eine WWW-Version des Handbuchs für SWI-Prolog. Darin sucht man durch Anklicken der 4 Bilder in der ersten Zeile.

SWI-Prolog von der Linux/Unix-Shell aufrufen:

In einem X-Terminal gibt man auf der Unix/Linux-Shell den Befehl
swipl (am Institut für Informatik auch: pl-cis)
ein; dann startet SWI-Prolog 5.10.4 [64 bit] (bzw. SWI-Prolog 5.6.54 [32 bit]). Es hat ein integriertes graphisches Hilfesystem, einen graphischen Tracer zur Fehlersuche, und eine vereinfachte Version des Emacs-Editors geladen. Mit dem SWI-Prolog-Befehl
help(Befehl).        oder       apropos(Thema).
kann man dann über ein Hilfsfenster Information über einen PROLOG-Befehl oder ein Thema im Handbuch suchen lassen. Mit dem SWI-Prolog-Befehl
emacs.
kann man den Editor aufrufen, der in einem eigenen Fenster startet. (Wir werden üben, wie man damit eine Programmdatei schreibt und das Programm an Prolog schickt.) Mit dem SWI-Prolog-Befehl
guitracer.
kann man den graphischen oder ,,symbolischen'' Tracer aufrufen, um die Abarbeitung eines Programms schrittweise zu verfolgen. (Der Tracer muß aber mit weiteren Befehlen, debug. oder trace. oder spy(Befehl) eingeschaltet werden.) Mit dem SWI-Prolog-Befehl
manpce.
kann man Hilfe über die Programmierung der graphischen Bedienoberfläche bekommen. Es erscheint ein Fenster, wovon wir höchstens brauchen, daß man unter ,,Tools'' u.a. den Emacs-Editor und den graphischen ,,Tracer'' findet. (M.E. ist der nicht-graphische Tracer trace/2 hilfreicher.)

Prolog beenden oder abbrechen

Man beendet Prolog durch die Eingabe von
halt.     oder     ^D        d.h. gleichzeitigem Drücken der Ctrl bzw. Strg-Taste und der Taste d.
Wenn sich das Programm in einer Endlosschleife befindet, muß man es durch Eingabe von
^C        d.h. gleichzeitigem Drücken der Ctrl bzw. Strg-Taste und der Taste c
stoppen und kann es dann mit
halt.     oder     ^D
abbrechen.

Programme schreiben

Programme schreibt man in einem Editor, speichet sie in einer Datei und lädt diese Datei, z.B. meinProgramm.pro, indem man in Prolog den Befehl
consult('meinProgramm.pro').       oder       ['meinProgramm.pro'].
eingibt (ggf. mit passenden Pfadnamen). Wir empfehlen, als Editor den eingebauten Editor zu benutzen, den man mit emacs. aus Prolog aufruft. (In seiner Fensterleiste gibt es Optionen, die Datei zu sichern und nach Prolog zu laden.)
Dateien mit Prolog-Programmen sollten einen Namen tragen, der mit ,,.pl'' oder ,,.pro'' endet. Daran erkennt der Emacs-Editor, daß es sich um PROLOG-Programme handeln soll; er kann dann die Schlüsselwörter von PROLOG farbig markieren und die Programme lesbar formatieren. Außerdem bietet er dann ein Menü Prolog an, in dem man bestimmte Befehle, z.B. das Laden einer Programm-Datei in das laufende PROLOLG-System, durch anklicken mit der Maus aufrufen kann.



File translated from TEX by TTH, version 3.67.
On 12 Apr 2013, 14:25.