`bits-Logonext up previous Next: Internet: Werkzeuge und Up: Die Bücherecke Previous: Programmierung in Pascal

Grundlagen der funktionalen Programmierung

  Nachdem ich im letzten Semester ein Oberon Buch vorstellen durfte, bekam ich jetzt ein Buch über funktionales Programmieren zum Rezensieren. Die Verlage scheinen unseren A-Zyklus nicht zu kennen.

Das Buch ist laut Autor an Studierende im Hauptstudium gerichtet und ist in zwei Teile gegliedert. Im ersten Teil gibt der Autor eine Einführung in den funktionalen Stil anhand der Sprache Gofer. Im zweiten Teil geht es um die Semantik funktionaler Sprachen und Implementierungstechniken. Daran schließt sich der obligatorische Anhang an.

Zur Einstimmung kontrastiert Thiemann kurz am Beispiel der Listenkonkatenation den funktionalen und imperativen Stil und nennt dann die Eigenschaften funktionaler Sprachen. Danach werden die elementaren Konzepte und ihre Realisierung in Gofer beschrieben, wobei der Schwerpunkt eindeutig auf der Polymorphie liegt. Diejenigen, die Miranda in A1 hatten, dürften keine Probleme haben zu verstehen, was der Autor zu beschreiben versucht. Andere werden sicher einige Schwierigkeiten haben, z.B. bei der Funktionsdefinition mittels Mustern.

Was mich beim Lesen gestört hat, war, daß zu den Konzepten dauernd die Syntaxdiagramme von Gofer auftauchten. Diese Mischung aus speziellen Sprachkonstrukten, allgemeinen Konzepten und teilweise implementationstechnischen Details finde ich als Einführung nicht sehr verständlich. Syntaxdiagramme sagen zwar etwas über das Sprachdesign aus und ob eine Funktion syntaktisch korrekt ist oder nicht, tragen aber wenig zum Verständnis der Prinzipien bei, und ist das erst gewonnen, sind sie schon fast wieder überflüssig.

Es folgt ein Kapitel über higher-order functions, wobei Thiemann die Formulierung ,,geschönfinkelte`` Funktion als Übersetzung von curried functions benutzt. Die Idee der higher-order functions wird dankenswerterweise durch einige Beispiele, z.B. Operationen auf Matrizen, verdeutlicht.

Natürlich darf die verzögerte Auswertung nicht fehlen. Leider ist dieses Prinzip sehr kompliziert beschrieben und die Beispiele, u.a.\ die Newtonsche Approximation der Quadratwurzel, sehr viel schöner bei Turner gif erklärt (und anscheinend dort entnommen).

Sehr kurz geht der Autor auf Programmsynthese und -transformation ein, und auch das ist besser von Bird & Wadler gemacht worden.

Interessant und wirklich fortgeschritten ist die Behandlung von Monaden (eine Möglichkeit, Ein- und Ausgabe in funktionalen Sprachen zu spezifizieren). Überhaupt wird das ganze Thema I/O ausführlich behandelt.

Der erste Teil wird dann mit einer Übersicht einiger funktionaler Sprachen und einer Auflistung einiger allgemeiner Anwendungsbereiche, für die sich dieser Sprachstil besonders eignet, aber auch von speziellen Implementationen, beendet.

Den zweiten Teil konnte ich mangels Zeit nur oberflächlich lesen. Das Lambda-Kalkül wird natürlich behandelt, aber auch Fixpunktsemantik, strikte und nichtstrikte Semantik. Zusätzlich beschreibt der Autor Implementationsansätze für eine abstrakte Maschine und dafür geeignete Datenstrukturen.

Zu jedem Kapitel gibt es Aufgaben, von denen einige schon ziemlich kompliziert sind. Leider fehlen die Lösungen oder Tips. Ein absoluter Pluspunkt sind aber die Literaturhinweise am Ende fast jeden Kapitels.

Und das Fazit: Das Buch ist geeignet, um Gofer zu lernen. Wenn Ihr bereits etwas über FP wißt, ist das Kapitel über I/O interessant. Einblicke in die Konzepte gewinnt man eher in anderer Literatur.
Frank Hohenschuh

PETER THIEMANN
Grundlagen der funktionalen Programmierung
348 S., DM 44, Teubner 1994
ISBN 3-519-02137-4



`bits-Logonext up previous Next: Internet: Werkzeuge und Up: Die Bücherecke Previous: Programmierung in Pascal