Übungen zur Vorlesung Deklarative Programmiersprachen

Neuer Raum: Die Übung findet in Zukunft im Hochhaus (CAP4) 7. Stock, Raum 715 statt.

Organisatorische Hinweise zum Übungsbetrieb

Beispiele zur Vorlesung

Aufgabenblätter und Lösungen

Übungsblätter werden jeweils Dienstags in der Vorlesung ausgegeben und sollen genau eine Woche später in der Vorlesung abgegeben werden.

Software

Hugs

Hugs ist ein frei verfügbarer Interpreter für die Programmiersprache Haskell. Sie können zur Bearbeitung der Übungsaufgaben entweder die Installation auf den Uni-Rechnern verwenden, aber sich Hugs auch auf Ihrem eigenen PC installieren.

Dokumentation

Software

Vorkompilierte Versionen für Windows, Macintosh und Linux sowie die Sourcen finden Sie hier. Achtung: Das Linux-rpm ist in Bezug auf die Abhängigkeitsanforderungen ziemlich idiotisch gemacht. Wer neuere Versionen als die geforderten installiert hat, kann das Paket mit "rpm -i --nodeps hugs98-Feb2000-1.i386.rpm" trotzdem installieren. Falls es dabei Probleme gibt oder nur ältere Versionen mancher Libraries installiert sind, kann man von der obigen URL auch das Source-RPM runterladen und ein neues Binary-RPM erzeugen. Das funktioniert sehr gut.

PAKCS

PAKCS (Portland Aachen Kiel Curry System) ist ein Interpreter für die logisch-funktionale Programmiersprache Curry. Da PAKCS die Curry-Programme in SICStus Prolog, einen nicht frei verfügbarer Prolog-Compiler, übersetzt, können wir leider keine Version anbieten, die Sie zu Hause auf ihren eigenen Rechnern installieren können. Sie können PAKCS auf den Rechern des Lehrstuhls unter Verwendung ihrer Accounts ausführen.

Benutzung von PAKCS auf den Lehrstuhlrechnern

PAKCS ist unter dem Login "pakcs" installiert. Der Aufruf erfolgt durch Eingabe von
/home/pakcs/bin/curry2prolog
Sie können auch "/home/pakcs/bin/" in ihren Pfad aufnehmen und PAKCS dann durch Eingabe von "curry2prolog" starten. Nach dem Start steht eine interaktive Umgebung zur Verfügung, die der von Hugs gleicht. Durch Eingabe von
:h	
erhalten Sie eine Liste mit Befehlen, die Sie in PAKCS eingeben können. Die wichtigsten Befehle sind:
:l prog Einlesen eines Programms prog.curry
:r Erneutes Einlesen des zuletzt geladenen Programms
ausdruck Auswertung eines Ausdrucks. Hierbei gibt es einen wichtigen Unterschied zu Hugs: Aufgrund des möglichen Nichtdeterminismus in logisch-funktionalen Sprachen können evtl. mehrere Ergebnisse/Lösungen zu einem Ausdruck existieren. Zunächst wird aber immer nur ein Ergebnis berechnet. Durch Eingabe eines Semikolons und Return/Enter können Sie die Berechnung eines weiteren Ergebnisses anfordern. Sollte kein weiteres Ergebnis existieren, antwortet PAKCS mit "No more solutions." Wenn Sie statt eines Semikolons direkt Return/Enter drücken, wird die Berechnung sofort beendet.
:t ausdruck Typ des Ausdrucks anzeigen
:e funktionsname       Auswertungsregeln einer Funktion anzeigen
:q PAKCS beenden

Dokumentation

Eingabe von Programmtexten

Achten Sie bei der Eingabe von Curry-Programmen darauf, keine Tabulatoren zu verwenden, sondern die Einrückungen nur durch Leerzeichen zu erreichen. Der Parser von PAKCS kommt mit Tabulatoren nicht zurecht. Wenn Sie aus Versehen doch einen Tabulator verwenden, wird PAKCS einen Syntaxerror melden oder ungefähr folgende Fehlermeldung ausgeben:
Lexical error at line 16, column 8.  Encountered: "\t" (9), after : ""
Falls Sie zur Eingabe den den (X)Emacs verwenden wollen, können Sie einen speziellen Curry-Modus verwenden, bei dem z.B. die Schlüsselwörter eingefärbt werden. Legen Sie dazu eine Datei mit dem Namen ".emacs" (den Punkt nicht vergessen!) in ihrem Home-Verzeichnis an und fügen Sie dort folgende Zeilen ein:
(setq load-path (cons "/home/curry/lib/" load-path))

(setq auto-mode-alist
      (append auto-mode-alist
              '(("\\.curry$"  . curry-mode)
                ("\\.lcurry$"  . literate-curry-mode))))

(autoload 'curry-mode "curry-mode"
  "Major mode for editing Curry programs." t)
(autoload 'literate-curry-mode "curry-mode"
  "Major mode for editing literate Curry programs." t)

(add-hook 'curry-mode-hook 'turn-on-curry-font-lock)
(add-hook 'curry-mode-hook 'turn-on-curry-decl-scan)
(add-hook 'curry-mode-hook 'turn-on-curry-indent)
(add-hook 'curry-mode-hook 'turn-on-curry-hugs)
	
Klaus Höppner