Einführung in das Symbolische Programmieren
mit PROLOG
              
Vorlesung mit Tutorium am Rechner
CIS, SS 2001

Hans Leiß

Organisatorisches

Die Raumangabe im Vorlesungsverzeichnis stimmen nicht mehr! Dienstags sind wir im Rechnerraum Z36 der Informatik und in Z11 (Keller), Donnerstags in 1.27.
Zeit Raum
Vorlesung Do, 15-17 1.27, Oettingenstr.67
Tutorium Di, 11-13 Z36, Oettingenstr.67
Beginn Di, 23.4. 1.14 (an diesem Tag im Raum wie im Vorlesungsverzeichnis!)

Bei Fragen außerhalb der Veranstaltungszeiten können Sie eine Nachricht schicken an mich oder Simone Leonardi

leiss@cis.uni-muenchen.de       bzw.       simone@cis.uni-muenchen.de

oder in meine

Mentorenstunde Do, 14-15 Raum B 107, Oettingenstr.67

kommen. (Der Termin ist gegenüber dem Vorlesungsverzeichnis und den Informationsbroschüren verschoben, weil er sich in diesem Semester mit dem PROLOG-Tutorium überscheidet.)

Vorlesungsfolien

Die Folien der Vorlesung werden im Lauf des Semesters unter

http://www.cis.uni-muenchen.de/~leiss/symbolischesProgrammieren-01/prologfolien.ps

zur Verfügung gestellt. Markieren Sie die Seiten, die Sie noch nicht haben, und drucken Sie jeweils nur die aus.

  1. Folien zu PROPLOG (Aussagenlogisches Prolog): Seiten 1-8
  2. Folien zu DATALOG (PROLOG mit variablen und konstanten Individuentermen)
    (Seiten 9-16 geändert, 17.5.)
    (Seiten 15-17 geändert und ergänzt, 31.5.)
  3. Folien zu PURE PROLOG: (Prolog mit komplexen Termen) Seiten 18-25 (31.5.)
    (Seite 23: korrigiert, 7.6.)
  4. Folien zu Listen und Rekursiven Programmen: Seiten 26-32 (7.6.)
    (Seiten 30/31 korrigiert: Z >= X statt X <= Z, 12.6.)
  5. Folien zu PROLOG: Alternativen abschneiden mit ! und Fallunterscheidung mit ->: Seiten 33-40 (12.6.)
    (Seiten 38-40 neu (21.6.))
  6. Folien zu PROLOG: Fallunterscheidung, Schleifen, Datentypen: Seiten 41-46 (21.6.)
    Datentypen: Blätter von Bäumen: Seite 47 (28.6.)
  7. Folien zu PROLOG: Ein- und Ausgabeströme: Seiten 48-50 (28.6.)
    Beispiel Satzende-Erkenner, Tokenizer: Seiten 51-67 (28.6.)
  8. Folien zu DCGs: Differenzlisten, Definite Clause Grammars: Seiten 68-76 (3.7.)
    Grammatiken mit Baumausgabe, Linksrekursion u.a.: Seiten 78-81 (23.7.)
  9. Folien zu Metainterpreter und Partieller Auswertung: Seiten 79-92 (23.7.)

Tutorium

Für das Tutorium werden hier auch die Übungsaufgaben erscheinen.

  1. Aufgabe 1 + 2, Abgabe Di, 15.5.2001
  2. Aufgabe 3 + 4, Abgabe Di, 22.5.2001       

  3. Anwesenheitsaufgabe 1, Di 29.5.
    Anwesenheitsaufgabe 2, Di 29.5.
    Anwesenheitsaufgabe 3, Di 29.5.
  4. Aufgabe 5 + 6, Abgabe Donnerstag, 7.6.01, (in der Vorlesung)
    Abgabetermin verlängert auf Dienstag, 12.6.01 (im Tutorium)

  5. Aufgabe 7 + 8 + 9, Abgabe Donnerstag, 19.6.01, (in der Übungsstunde)
  6. Aufgabe 10+11, Abgabe Donnerstag, 28.6.01, (in der Vorlesung)
    *Aufgabe 11 korrigiert!* (25.6.)

  7. Anwesenheitsaufgabe 1, Di 26.6.       blaetter.pro
    Anwesenheitsaufgabe 2, Di 26.6.       dottree.pro

  8. Aufgabe 12+13, Abgabe: Do 3.7. (Raum 1.14 !)       tokenizer.pro
    Abgabefrist verlängert bis: Donnerstag(!), 5.7.       dottree inkl. drawTree

  9. Aufgabe 14, Abgabe Do 12.7.       parser.gram1.pro
    Bem.: Die Folien zur Erweiterung der Grammatik sind inzwischen in den oben angegebenen enthalten.

PROLOG

Wir benutzen das SWI-Prolog von Jan Wielemaker, Version 4.0.2 vom April 2001. Dazu gibt es eine WWW-Seite unter

http://www.swi.psy.uva.nl/projects/SWI-Prolog/

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.

Schneller ist es, wenn man die Kopie der Dokumentation am CIS benutzt; sie befindet sich unter der Adresse

http://www.cis.uni-muenchen.de/docs/prolog/

Man sucht in der Dokumentation durch Anklicken der 4 Bilder in der ersten Zeile.

Man kann SWI-Prolog auf den Rechnern in Z11 auf drei Arten benutzen:

SWI-Prolog von der Unix-Shell aufrufen:

In einem X-Terminal (oder auch ohne Fensterumgebung) gibt man auf der Unix-Shell den Befehl

pl

ein; dann startet SWI-Prolog 4.0.2 (wenn nicht, bitte beim Superuser oder bei mir melden!). Es hat ein integriertes graphisches Hilfesystem, einen graphischen Tracer zur Fehlersuche, und eine schlanke 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 eine Nachahmung des Emacs-Editors (s.u.) aufrufen, der in einem eigenen Fenster startet. (- vorausgesetzt, daß man Prolog unter der X-Bedienoberfläche gestartet hat). Mit dem SWI-Prolog-Befehl

guitracer.

kann man den graphischen oder ,,symbolischen'' Tracer aufrufen, der dazu benutzt werden kann, 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.

SWI-Prolog aus dem Emacs-Editor aufrufen:

  1. An den Rechnern am CIS (Z 11): (sollte im SS 2001 unnötig sein) In seinem Heimverzeichnis sollte es eine Datei mit dem Namen .emacs geben, in die man folgende Zeilen einfügen muß:

    ;;; Emacs-mode fuer SWI-Prolog, am CIS auf Z11-Rechnen      22.4.2001
    
    (if (equal (getenv "OSTYPE") "linux")
        (load-file "/usr/local/lib/emacs/site-lisp/.emacs.prolog-kurs.swi")  ;; nicht aktuell!
      t)    
    

    Findet man (mit ls ~/.emacs) diese Datei nicht, so speichere man diese hier unter dem Namen ~/.emacs.

  2. An den Rechnern in der Informatik (Z 36): Man füge in seine Datei  /.emacs folgende Zeilen ein:
    ;;; ------------------------ Prolog - Unterstuetzung ------------------------------
    ;;; Beim Laden von Dateien mit Namen "<Datei>.pro" automatisch in Prolog-mode gehen:
    (setq auto-mode-alist (cons '("\\.pro$" . prolog-mode) auto-mode-alist))
    ;;; Welches Prolog-System? SWI-Prolog 4.0.3 vom April 2001
    (setq prolog-system 'swi)
    ;;; Wo ist der System-Aufruf davon? Es ist installiert unter /soft/bin/pl4:
    (setq prolog-program-name "pl4") 
    ;;; In welchem Verzeichnis liegt die Datei "prolog.el" des Emacs?
    (load-file "/soft/share/emacs/site-lisp/.emacs-addon")
    ;;; Mit "Esc-x run-prolog" im Emacs Prolog starten:
    (autoload 'run-prolog "prolog" "Run an inferior prolog process" t)
    ;;; Mit "Esc-x prolog-mode" einen Puffer in Prolog-mode setzen:
    (autoload 'prolog-mode "prolog" "Mode for editing Prolog programs" t)
    ;;; --------------------------------------------------------------------------------
    

  3. Man startet in einem Terminalfenster den Editor mit

    emacs        oder        emacs meineDatei.pro

    Dort kann man unter dem Menüpunkt Files eine neue Datei erstellen oder eine vorhandene wie meineDatei.pro in einen Puffer Buffer des Editors laden.

    Falls der Dateiname in ".pro" endet, erscheint auf der Menüleiste ein Feld Prolog. Durch Anklicken des Menüs kann man dann bequem z.B.

    Falls der Dateiname anders endet, kann man das Prolog-Menü auch durch

    Esc-x prolog-mode

    bekommen. (Mehr dazu im Tutorium.)

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 und kopiert sie entweder mit der Maus in das laufende Prolog-System, oder man lädt eine Programmdatei meineDatei.pro, indem man in Prolog den Befehl

consult('meineDatei.pro').       oder       ['meineDatei.pro'].

eingibt (ggf. mit passenden Pfadnamen).

Dateien mit Prolog-Programmen sollten einen Namen tragen, der mit ,,.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.

Emacs-Editor:

Wir empfehlen, SWI-Prolog im Emacs-Editor oder mit XPCE (und dem eingebauten Mini-Emacs) zu benutzen. Die wichtigsten Emacs-Befehle sind auf den zwei Seiten der

GNU Emacs Reference Card

zusammengefaßt, die man sich (doppelseitig: mit Druckeroption lpr -Plp) ausdrucken kann. Unter dem Menü Help findet man im Emacs auch ein Tutorium zur Bedienung, wo die Befehle genauer erklärt werden. Es lohnt sich, das frühzeitig zu lernen.

Proseminarscheine

Um einen Proseminarschein zu erhalten, sind entsprechende Prolog-Kenntnisse nachzuweisen. Dazu werden Programmieraufgaben verteilt, die man selbständig lösen muß. Am Ende des Semesters wird eine Klausur geschrieben. Dabei sollte man 60 Prozent der Aufgaben lösen können.

Literatur

Außerdem findet man im Internet verschiedene Tutorien zu Prolog. Eine gute Suchmaschine findet man unter:

http://www.google.de/


File translated from TEX by TTH, version 2.54.
On 23 Jul 2001, 12:44.