Functional Programming

In imperativen Programmiersprachen, wie z.B. C, C++ oder Java, herrscht ein Programmierstil vor, bei dem Berechnungen durch Aneinanderreihungen von Anweisungen ausgedrückt werden.

Wie unterscheiden sich funktionale Programmiersprachen davon? Bei ihnen besteht der Ablauf eines Programms daraus, dass Funktionen auf Argumente angewendet werden. Dabei können Argumente elementare Werte sein, wie etwa Zahlen oder Zeichenketten: 4 + 9, die Funktion + angewendet auf die Zahlen vier und neun.

Oder Argumente entstehen wiederum aus den Anwendungen von Funktionen auf Argumente - bei verschachtelten Ausdrücken: 2 * 4 + 3 * 5, die Funktion + angewendet auf das Resultat der Funktion * angewendet auf die Zahlen zwei und vier und dann nochmal auf die Zahlen drei und fünf.

Ausdrücke können anhand von Variablen zu Funktionen mit Parametern abstrahiert werden: s(x) = x + 1, die Funktion s ist so definiert, dass sie ihr Argument um eins erhöht.

Auf diese Art können Funktionen anhand von anderen Funktionen definiert werden. Ihre volle Ausdrucksfähigkeit erhalten funktionale Programmiersprachen durch bedingte Ausdrücke, durch Rekursion und dadurch, dass Funktionen als Argumente übergeben werden oder als Resultate von Funktionsanwendungen auftreten können.

Warum sind funktionale Programmiersprachen interessant? Derzeit sieht es so aus, als würde sich mit jeder neuen Mikroprozessorgeneration die Zahl der enthaltenen Prozessorkerne verdoppeln. Um alle Prozessorkerne während einer Berechnung auszunutzen, müssen in einem imperativen Programm explizit mehrere nebenläufige Sequenzen von Anweisungen formuliert werden. In einem funktionalen Programm ergibt sich Nebenläufigkeit ohne weiteres Zutun, weil bei verschachtelten Ausdrücken die Teilresultate gleichzeitig berechnet werden können.

Für den funktionalen Programmierstil spricht auch seine Klarheit, die Programme gut verständlich macht. Das theoretische Fundament (siehe Lambda-Kalkül) ist elegant und macht die darauf aufbauenden Programme zugänglich für formale Analysen oder automatische Transformationen.


Quellen

Anthony J. Field, Peter Harrison
"Functional programming"
Addison-Wesley 1988
ISBN 0201192497

Herbert Stoyan, Günter Görz
"LISP. Eine Einführung in die Programmierung"
Springer 1984
ISBN 3540169148

Patrick Henry Winston, Berthold Klaus Paul Horn
"LISP"
Addison Wesley 1997
ISBN 3925118616

Harold Abelson, Gerald Sussman
"Structure and Interpretation of Computer Programs"
Mcgraw Hill 1997
ISBN 0070004846