Universität Bremen
FB3 AG BKB CXL

Praktische Informatik 3

Willkommen auf der Heimatseite der Lehrveranstaltung „Praktische Informatik 3“ im Wintersemester 2008/2009.

Inhaltliches

Das Thema dieser Veranstaltung ist die funktionale Programmierung.

Bei der funktionalen Programmierung werden Programme als 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.

Organisatorisches

Die VAK der Veranstaltung ist 03-05-G-700.03.

Termine

Die Vorlesung ist Mittwochs 13-15 im Hörsaal SFG 0140.

Wegen der Erstsemesterorientierung findet die erste Vorlesung am Mittwoch, den 29.10. statt. Die Tutorien beginnen ab der ersten Vorlesung; insbesondere gibt es am 28.10. und 29.10. noch keine Tutorien.

Neben der Vorlesung werden fünf Tutorien angeboten:

Termin Ort Tutor
Di10-12 MZH 7210 Klaus Hartke
Di17-19 MZH 1380 Marcus Ermler
Mi8-10 MZH 7250 Ewaryst Schulz, Dominik Dietrich
Do8-10 FZB 0240 Dominik Luecke
Do10-12 Cartesium 0.01 Christian Maeder

Die Überlegung, das Tutorium am Donnerstag morgen auf einen anderen Termin zu verschieben, scheiterte leider an einem Mangel an für alle Teilnehmer möglichen Alternativtermin. Daher werden alle Termine so bleiben.

Außerdem gibt es neben den Tutorien noch eine 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 10-12 und nach Vereinbarung (Email) von Berthold Hoffmann (<hof>) in seinem Büro (Cartesium 2.048) abgehalten; mehr Informationen dazu hier.

Scheinkriterien

In der ersten Vorlesung wurden folgende Scheinkriterien beschlossen:

Fachgespräche

Die Fachgespräche finden am 05.02, 06.02 und 19.02. in der Zeit von 9:00 bis 17:00 statt. Eine Anmeldung ist jetzt nicht mehr möglich.

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
89.5-85 1.7 74.5-70 2.7 59.5-55 3.7
100-95 1.0 84.5-80 2.0 69.5-65 3.0 54.5-50 4.0
94.5-90 1.3 79.5-75 2.3 64.5-60 3.3 49.5-0 n/b

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 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; 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 im eigenen Interesse möglichst frühzeitig den Tutor (z.B. per Mail) benachrichtigen.

Vorlesungsfolien

Die Vorlesungsfolien sind jeweils verfügbar als ganzseitiges PDF zum Betrachten, oder als 8:1 Handzettel ohne Effekte zum Drucken:

Ferner gibt es eine Liste von Verständnisfragen für den Vorlesungsstoff, die zur eigenständigen Überprüfung des Verständnisses des Stoffers, Diskussionsgrundlage in den Tutorien oder als Grundlage für Fachgespräche oder eine Modulprüfung dienen können. Faustregel ist: wenn Ihr die Fragen aus diesem Katalog nicht beantworten könnt, fragt nach!

Übungsblätter

Hier finden sich die Übungsblätter zur Veranstaltung.

Die Übungsblätter sind elektronisch abzugeben am Montag um 10:00. Einige Tutoren bevorzugen eine zusätzliche Abgabe in Papierform, entweder im Tutorium oder in das Postfach der AG Krieg-Brückner im Erdgeschoss des Cartesiums (euer Tutor informiert Euch über Einzelheiten).

Die Abgabe sollte mit LaTeX gesetzt werden. Dazu benutzt bitte die Klasse pi3.cls; sie findet sich hier zusammen mit einigen Beispielen, die die Benutzung verdeutlichen.

Die Bewertung der Übungsblätter erfolgt nach folgendem Schlüssel:

Wenn die Verwendung von QuickCheck explizit auf dem Aufgabenblatt gefordert wurde, geht dies zur Hälfte in die für die Tests gegebenen Punkte ein; ansonsten ist die Verwendung von QuickCheck fakultativ.

Bücher und weiterführende Literatur

Dieses Buch bietet einen gute, systematische Einführung in Haskell:

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

Dieses Buch wendet sich eher Programmieranfänger, und bietet neben Haskell auch eine Einführung in Unix-artige Betriebssysteme:

[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

Das folgende 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

Dieses Buch bietet einen etwas langsameren Einstieg in das Thema, und behandelt neben der Sprache Haskell auch die Sprachen ML und Opal:

[Cover] Peter Pepper:
Funktionale Programmierung in OPAL, ML, HASKELL und GOFER
Springer Verlag
Zweite Auflage, 2003.
ISBN 3-540-43621-9

Software: Haskell in Aktion

Der Übungsbetrieb basiert auf dem Glasgow Haskell Compiler ghc, oder dem Haskell-Interpreter Hugs.

Der Glasgow Haskell Compiler hat eine interaktive Kommandozeilenschnittstelle, kann aber auch separat ausführbare Programme erzeugen. Der GHC übersetzt langsamer als Hugs, hat aber wesentlich bessere Fehlermeldungen.

Hugs ist ein schlanker, schneller Interpreter für Haskell, der naturgemäß in der Ausführungsgeschwindigkeit nicht mit dem ghc mithalten kann. Auf der Hugs Homepage gibt es Implementationen für viele verschiedene Betriebssysteme (Unix/Linux, Windows, Mac &c).

Hugs und ghc sind auf dem FB3-Netz unter Linux vorinstalliert (beide unter /home/linux-bkb/bin).

Links zu Haskell