Vorlesung: Praxis der Funktionalen Programmierung


Partiell angewandte Funktionen

Welchen Typ hat der Ausdruck "map hoch" (mit der obigen Definition von unit)? Nun, sicher den gleichen wie "um", also "[Char] -> [Char]". Zu beachten ist, daß "map" eigentlich zwei Argumente hat (eine Funktion und eine Liste), daß aber "map hoch" (d. h. "map" mit nur einem Argument) ebenfalls ein syntaktisch und typisiert korrekter Ausdruck ist. Wir bezeichnen ihn als partiell angewandte Funktion. Nochmal: wenn
g x y = ...
eine zweistellige Funktion ist, und e ein Ausdruck (vom richtigen Typ), dann ist "g e" eine einstellige Funktion.

Tatsächlich gibt es in Haskell nur einstellige Funktionen, und die mehrstelligen werden simuliert. Jetzt wird auch die Notation für die Typen klar: Wir schreiben zwar

g :: a -> b -> c
aber der Pfeil ist ein Typkonstruktor mit zwei Argumenten. Es sind einfach einige Klammern weggelassen, der vollständige Ausdruck ist
g :: a -> (b -> c)

Wir hatten vorhin

um :: [Char] -> [Char]
um cs = map hoch cs  where ...
Genausogut können wir schreiben
um :: [Char] -> [Char]
um = map hoch  where ...
Tatsächlich ist diese Variante sogar vorzuziehen, denn das Argument cs wird in der Definition gar nicht weiter benutzt, und wir gewinnen keinerlei neue Information dadurch, daß dort ein "cs" steht.

best viewed with any browser


http://www.informatik.uni-leipzig.de/~joe/ mailto:joe@informatik.uni-leipzig.de