03.11.2012 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!