Universität Bremen  
   
  Christoph Lüth > Deutsch
English
 

[03-700.03] Praktische Informatik 3 (WS 04/05)

 

Willkommen auf der Heimatseite der Lehrveranstaltung "Praktische Informatik " im Wintersemester 2004/2005.

Hier findet ihr Inhaltliches, Organisatorisches, Kopien der Vorlesungsfolien und Aufgabenzettel, ein Literaturverzeichnis, etwas über Haskell-Software. und Links zu Haskell.

Inhaltliches

Das Thema dieser Veranstaltung ist die funktionale Programmierung.

Bei der funktionalen Programmierung werden Programme als emph{Funktionen} modelliert, die eine Eingabe auf eine Ausgabe abbilden. Dieser unschuldige Satz hat weitreichende Konsequenzen. Zum ersten bedeutet es nämlich, daß unsere Programme zustands- und variablenfrei sind; eine Funktion f muß nämlich für eine Eingabe a immer dasselbe Ergebnis liefern, und kann nicht in Abhängigkeit von einem globalen oder internen Zustand ein anderes Ergebnis zurückgeben.

Diese Eigenschaft (auch referentielle Transparenz genannt), zusammen mit den anderen Eigenschaften funktionaler Programmiersprachen, wie (strenge) Typisierung, Funktionen höherer Ordnung und algebraischen Datentypen, machen funktionale Programme elegant, kurz, mathematischen Betrachtungen (Korrektheitsbeweisen) zugänglich und vor allem ganz anders als imperative oder objektorientierte Programme, wie wir sie in PI1/PI2 kennengelernt haben. Dieser Abstraktionsgewinn erlaubt es, in Konzepten und Algorithmen zu denken, nicht in Klassenstrukturen und geschweiften Klammern.

Aus diesem Grunde sollte jeder Informatiker eine funktionale Sprache einmal kennengelernt haben --- wie zum Beispiel die in dieser Veranstaltung verwendete Sprache Haskell.

Gliederung

Bis Weihnachten werden wir uns mit den Grundkonzepte der funktionalen Programmierung beschäftigen, wie Funktionsdefinition, Typisierung, Basisdatentypen, Funktionen höherer Ordnung, Polymorphie, algebraischen Datentypen und abstrakten Datentypen (ADTs).

Um zu demonstrieren, dass funktionale Programmiersprachen nicht nur elegant und abstrakt, sonder auch eminent nützlich sind, werden wir nach Weihnachten diese Konzepte dann anwenden.

Organisatorisches

Die VAK der Veranstaltung ist 03-700.03.

Termine

Die Vorlesung ist Montags 10-12 im kleinen Hörsaal ("Keksdose").

Die erste Vorlesung ist am Montag, dem 25.10; die Tutorien finden ab diesem Termin statt.

Neben der Vorlesung werden acht Tutorien angeboten:

Di 8-10       MZH 1380     Wolfgang Machert (wmachert)
GW2 B 1410 Christian Maeder (maeder)
Di17-19 MZH 1380 Diedrich Wolter (dwolter)
Mi8-10 MZH 6240 Hennes Märtins (maertins)
MZH 7250 Shi Hui (shi)
Mi13-15 MZH 6240 Klaus Lüttich (luettich)
MZH 1380 Dennis Walter (dw)
Mi17-19 MZH 1380 Kai-Florian Richer (richter)

Außerdem gibt es neben den Tutorien noch eine FAQ (Fragestunde), die sich insbesondere an Studenten wendet, die sprachliche Probleme haben. Hier könnt ihr alles fragen, was im Tutorium oder der Vorlesung zu kurz kam.

Die Fragestunde wird Mi von 09-11 von Berthold Hoffmann (hof) in seinem Büro (MZH 8130) abgehalten.

Übungsbetrieb

Es werden zweiwöchentlich Übungssblätter ausgegeben - sie sind Montags ab 16:00 auf dieser Webseite verfügbar.

Die Übungsblätter werden in den Tutorien besprochen. Ab dieser Besprechung sind zwei Wochen Zeit zur Bearbeitung der Übungsblätter; danach werden die Übungsblätter in den Tutorien beim Tutor abgegeben.

Scheinkriterien

In der ersten Vorlesung wurden folgende Scheinkriterien ausgehandelt und einstimming angenommen:
  • Von den ausgegebenen Übungsblättern müssen alle erfolgreich bearbeitet werden.
  • Ein Übungsblatt gilt als erfolgreich bearbeitet, wenn insgesamt 40% der Gesamtpunktzahl erreicht werden.
  • Die Individualität der Leistung wird sichergestellt durch:
    • Vorstellung der Lösung zu einer Aufgabe im Tutorium;
    • Mündliche Beteiligung im Tutorium.
    Kann der Tutor am Ende des Semesters nicht zweifelsfrei eine individuelle Leistung feststellen, findet ein Prüfungsgespräch statt.

Notenspiegel

Die Note für den PI3-Schein ergibt sich aus den in den Übungen erzielten Punkten nach folgendem Schlüssel:

Prozente   Note Prozente   Note Prozente   Note Prozente   Note
98-100 1.0 81-87.5 2.0 60-66.5 3.0 40-45.5 4.0
95-97.5 1.3 74-80.5 2.3 53-59.5 3.3 0-39.5 n/b
88-94.5 1.7 67-74.5 2.7 46-52.5 3.7

Spielregeln

  1. Gruppenübergreifende Zusammenarbeit und Recherche in Internet und der wissenschaftlichen Literatur zur Lösung der Aufgaben ist zulässig (und erwünscht), aber es die Angabe der Quellen ist zwingend erforderlich und gute wissenschaftliche Praxis.
    Eine Übernahme der Lösung von einer anderen Gruppe oder aus einer anderen Quelle ohne Quellenangabe gilt als Täuschungsversuch.
  2. Beim ersten Täuschungsversuch gibt es null Punkte für den gesamten Übungszettel, und ein Fachgespräch; spätestens beim zweiten Täuschungsversuch gibt es keinen Schein mehr.
  3. Wer seinen Übungszettel ohne vorherige Entschuldigung nach der Abgabefrist einreicht, erhält null Punkte. Also bei Verspätungen bitte möglichst frühzeitig den Tutor (z.B. per Mail) benachrichtigen.

Vorlesungsfolien und Übungsblätter

Übungsblätter

  • 1. Übungsblatt (Version 1.7) [PS] [PDF], ausgegeben am 01.11.04.
    Dazu: Schlüsselpaare.
  • 2. Übungsblatt (Version 1.1) [PS] [PDF], ausgegeben am 15.11.04.
    Dazu: Testdaten für die Double-Saison 2003/04
  • 3. Übungsblatt (Version 1.1) [PS] [PDF], ausgegeben am 29.11.04.
  • 4. Übungsblatt (Version 1.4) [PS], [PDF], ausgegeben am 13.12.04.
    Dazu: Koordinaten für einige Test-Touren von Klaus Lüttich.
  • 5. Übungsblatt (Version 1.1) [PS] [PDF], ausgegeben am 10.01.05.
  • 6. Übungsblatt (Version 1.0) [PS] [PDF], ausgegeben am 24.01.05.
  • Bonusübungsblatt (Version 1.0) [PS] [PDF], ausgegeben am 27.01.05.

Die Abgabe sollte mit LaTeX gesetzt werden. Dazu benutzt bitte pi3.cls; hier ist ein Beispiel.

Bücher und weiterführende Literatur

Die Veranstaltung basiert auf folgendem Buch:

[Cover]Simon Thompson:
Haskell: The Craft of Functional Programming
Zweite Auflage
Addison-Wesley Publishing Company, 1999
ISBN 0-201-34275-8


Seit Sommer diesen Jahres auf dem Markt ist dieses Buch, das sich eigentlich eher an Programmieranfänger wendet:

[Cover]Manuel Chakravarty und Gabriele Keller:
Einführung in die Programmierung mit Haskell.
Pearson Studium, 2004.
ISBN 3-8273-7137-6



Einen bunteren und zugleich abstrakteren Einstieg in Haskell bietet folgendes Buch:

[Cover]Paul Hudak:
The Haskell School of Expression
Cambridge University Press, 2000
ISBN 0-521-64408-9



Dieses Buch ist formaler als die vorherigen, und betont eher den Aspekt der formalen, korrekten Programmentwicklung:

[Cover] Richard Bird: Introduction to Functional Programming using Haskell.
Prentice Hall Series in International Computer Science.
Prentice Hall, 1998.
ISBN 0-13-484346-0


Software: Haskell in Aktion

Der Übungsbetrieb basiert auf dem Haskell-Interpreter Hugs. Hugs ist lokal im FB3-Netz als /usr/local/bin/hugs installiert.

Auf der Hugs Homepage gibt es Implementationen für viele verschiedene Betriebssysteme (Unix/Linux, Windows, Mac &c).

Es gibt auch mehrere Haskell-Compiler, der Glasgow Haskell Compiler hat sogar eine Hugs vergleichbare, interaktive Kommandozeilenschnittstelle. Für den anfänglichen Übungsbetrieb sind diese zwar etwas zu schwergewichtig, hat wesentlich bessere Fehlermeldungen.

Für das letzte und Teile des Bonusübungsblattes wird die Hugs Graphics Library benötigt. Hier eine Tipps und Hinweise dazu:

  • Die neueste Version der HGL, HGL 3.0, funktioniert nur mit dem GHC, unter Linux, nicht mit hugs und nicht unter Windows.
  • Die ältere Version der HGL (2.0.4) funktioniert nur mit der älteren Version von Hugs (November 2002, nicht November 2003), und gar nicht mit dem GHC.
  • Auf dem FB3-Netz ist die HGL für Hugs und den GHC vorinstalliert, und wird wie folgt benutzt:
    • Zur Benutzung mit Hugs muss man die entsprechende Bücherei in Hugs' Suchpfad mit aufnehmen, indem man die Option -P{Hugs}/lib/x11: in der Kommandozeile angibt, oder in die Umgebungsvariable HUGSFLAGS aufnimmt.
    • Zur Benutzung mit dem ghc muss man die (vorinstallierte) Package HGL mit angeben:
      /home/linux-bkb/bin/ghc --make -package HGL ...
      
  • Wer sich das zu Hause oder auf dem eigenen Laptop installieren möchte:
    • Von hier ist die alte Version der HGL erhältlich.
    • Von hier ist die alte Version von Hugs erhältlich.
    • Klaus Hartke hat RPMs freundlicherweise RPMs für die Installation für die HGL mit dem ghc bereitgestellt.
    • Zur Installation der HGL mit dem neuesten ghc hat Pierre 'kiesel' Willenbrock dankenswerterweise greencard auf die neueste Version des ghc angepasst, und ein kurze Anleitung geschrieben, welches die Installation beschreibt. Hier ist der benötigte Patch für greencard.
  • Um Programme zu schreiben, die sowohl unter GHC als auch unter Hugs laufen, kann man sich für den GHC die Datei GraphicsUtils.hs in das aktuelle Verzeichnis legen, und im Programm einfach import GraphicsUtils sagen. Hugs wird dann die alte HGL importieren, und der GHC diese Datei, die dann wiederum die neue HGL importiert. Diese Programm wird insbesondere für die Beispiele aus den Vorlesungen benötigt.

Links zu Haskell und Hugs

 
   
Autor: Dr. Christoph Lüth
 
   
Zuletzt geändert am: 7. Februar 2005   impressum