Open Source im professionellen Einsatz

Kommunikation mit der Aussenwelt

Will eine rein funktionale Sprache mit der Aussenwelt kommunizieren, so muß sie sich für Seiteneffekte öffnen. Rein funktionale Programmiersprache unterscheiden sich gerade darin von den imperativen Programmiersprachen, dass sie die Seiteneffekte in einer kontrollierten Art in die rein funktionale Sprache einbetten. Haskell kapselt imperative Subsysteme in so genannten Monaden. Diese Monaden gibt es unter anderem für Input/Ouput, Zustände, Fehlerbehandlung und Logging. Monaden zeichnen sich durch zwei Punkte aus: In ihnen gilt einerseits das sequentielle Ausführen von Anweisungen und andererseits sind Operationen in der Monade in sich abgeschlossen.

Rekursion anstelle von Schleifen und Zuweisungen

Ist die Schleife die Struktur zur Manipulation von Datensätzen für die imperative Programmierung, so ist es die Rekursion für den funktionale. In Python als imperativer Programmiersprache kann die Funktion Fakultät sowohl mittels Schleifen als auch durch Rekursion implementiert werden (Listing 3).

Listing 3: Fakultät-Funktion in Python

def fakLoop
    sum=1
    for i in range(1,n+1):
       sum = sum*i
       return sum

def fakRek(n):
    if (n==1): return 1
    else: return n*fakRek(n-1)

Funktionale Programmiersprachen sind für die Rekursion optimiert. Falls die letzte Berechnung einer Funktion deren rekursiver Aufruf ist, so nennt man diese Funktion endrekursiv (Listing 4).

Eine Endrekursion kann in funktionalen Programmiersprachen durch den Compiler in iterative Funktionen transformieren, sodass deren Speicherplatzverbrauch unabhängig von der Rekursionstiefe ist. Die Funktion "factorial" in Haskell benötigt die Hilfsfunktion "factorial' ", um endrekursiv zu sein. Der Wert der Fakultät-Funktion wird in der zweiten Variable akkumuliert.

Listing 4: Endrekursive Fakultät-Funktion

factorial :: (Num t) => t -> t
factorial n = factorial' n 1

factorial' :: (Num t) => t -> t -> t
factorial' 0 a = a
factorial' n a = factorial' (n-1) (n*a)

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook