skip to main content

kiesler.at

Einführung Funktionale Programmierung
updated by rck, 2006-03-26

Ich habe mir erlaubt, an dieser Stelle die Folien von Prof. Knoop respektive Prof. Puntigam in einen Online-Artikel umzuformen und zu ergänzen.

Funktionale Programmierung ist ein interessantes Gebiet der Programmierkunst, bei dem das "was" im Vordergrund steht und nicht etwa das "wie", wie bei der imperativen Programmierung.

Funktionsdeklarationen

Das um und auf in einer funktionalen Programmiersprache sind natürlich die Funktionen. Wärend in stackbasierten Programmiersprachen, wie beispielsweise forth, eher der Stackeffekt beschrieben wird:

: && ( b b -- b&&b )

(heißt: es werden zwei Werte am Stack erwartet, der logisch Verknüpfte Wert steht nach Ausführung am Stack)

beschreibt Haskell, als funktionale Programmiersprache, in ihrer Signatur den Zusammenhang der Funktionsparameter:

&& :: Bool -&gt Bool -> Bool

Heißt: && (die übliche Schreibweise für ein logisches Und) behandelt drei Werte. Diese sind einfach der Reihe nach anzugeben, der Letzte ist dann das Ergebnis.

In einer üblichen imperativen Sprache, beispielsweise C, würde das ganze so aussehen:

boolean and(boolean a, boolean b);

Doch Haskell ermöglicht auch noch, bei der Funktionsdeklaration beispielsweise Tupel zu definieren:

&& :: ( Bool -&gt Bool ) -> Bool

Das entspricht in etwa einem explizit aufgelöstem struct in C und lässt sich in anderen Paradigmen nicht unmittelbar abbilden.

Funktionsnotationen

Haskell unterstützt mehrere verschiedene Schreibweisen, der Vorteil der "wenigen Grundkonzepte" relativiert sich damit noch mehr. Prinzipiell kann man beispielsweise die Fakultätsfunktion (1 mal 2 mal 3 mal ... mal n) folgenderweise implementieren:


Lambda-Artig

fact :: Integer -> Integer
fact = \n -> (if n == 1 then 1 else (n * fact (n - 1)))



Gleichungsorientiert

fact :: Integer -> Integer
fact n = if n == 1 then 1 else (n * fact (n - 1))


als bedingte Gleichung

fact :: Integer -> Integer
fact n
   n == 1   &nbsp= 1
   otherwise = n * fact (n - 1)


davon abgesehen gibt es noch viele weitere Schreibweisen. Wichtige Konzepte sind zB Listcomprehension, Wildcards und lokale Deklarationen.



RSSComments
The comments are owned by the poster. We are not responsible for its content.
RSSAll Articles
2008, 2007, 2006, 2005, 2004