Informatik I - Institut für Informatik - Christian-Albrechts-Universität zu ...
Informatik I - Institut für Informatik - Christian-Albrechts-Universität zu ...
Informatik I - Institut für Informatik - Christian-Albrechts-Universität zu ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
3 Grundkonzepte funktionaler Programmierung<br />
Programmiersprachen zerfallen in zwei große Klassen: imperative und deklarative Sprachen.<br />
Der Unterschied zwischen den beiden Klassen liegt in den Mitteln, die sie <strong>zu</strong>r Beschreibung<br />
von Algorithmen und Datenstrukturen <strong>zu</strong>r Verfügung stellen. Zu den deklarativen<br />
Sprachen gehören insbesondere die funktionalen Sprachen, welche als Grundidee<br />
auf dem mathematischen, seiteneffektfreien Funktionsbegriff aufbauen und Funktionen<br />
wie gewöhnliche Datenobjekte, also etwa Zahlen oder Zeichenreihen, behandeln. Die Programmierung<br />
mittels funktionaler Sprachen nennt man funktionale Programmierung.<br />
Manchmal bezeichnet man funktionale Sprachen auch als applikativ und spricht dann von<br />
applikativer Programmierung 8 . Dieses Kapitel gibt mittels der Programmiersprache<br />
ML eine Einführung in die funktionale Programmierung.<br />
3.1 Funktionen als Grundlage des Programmierens<br />
In der Mathematik besteht eine Funktion f : M −→ N aus drei Dingen, nämlich dem<br />
Argumentbereich M, dem Resultatbereich N und einer Abbildungsvorschrift, die<br />
jedem Element x ∈ M genau ein Element y ∈ N <strong>zu</strong>ordnet und normalerweise durch einen<br />
Term beschrieben ist. Von ihrer Natur her sind Funktionen also statisch und damit in<br />
der Regel nichtalgorithmisch. Sie erlauben jedoch auch, Dynamik (d.h. Berechnungen,<br />
Abläufe, Algorithmen) aus<strong>zu</strong>drücken, indem man von der Originalform <strong>zu</strong> einer gleichwertigen<br />
rekursiven Form übergeht und dann jene <strong>zu</strong>r dynamischen Berechnung der Ergebnisse<br />
aus den Argumenten mittels Termerset<strong>zu</strong>ng verwendet. Wir wollen dies im folgenden an<br />
zwei einfachen Beispielen aus der Arithmetik demonstrieren. Im ersten Beispiel verwenden<br />
wir dabei die Teilbarkeitsrelation auf den natürlichen Zahlen: t | n drückt aus, daß t ∈ N<br />
ein Teiler von n ∈ N ist. Weiterhin verwenden wir hier eine offensichtliche Verallgemeinerung<br />
des Summensymbols von Intervallen auf beliebige endliche Teilmengen von N als<br />
Indexbereiche. Wird so ein Indexbereich durch Eigenschaften beschrieben, so notieren wir<br />
diese unter dem Summensymbol. Im Beispiel beschreibt etwa �<br />
t|n,t