Fachkonzept - Funktionskomposition
Funktionen hintereinander schalten
Mit dem Begriff Funktionskomposition beschreibt man das Hintereinanderschalten bzw. Verketten von Funktionen.
Im folgenden REPL-Dialog werden die Funktionen f
und g
hintereinandergeschaltet.
> f x = x + 1
<function> : number -> number
> g x = 2 * x
<function> : number -> number
> h x = g (f x)
<function> : number -> number
> h 3
8 : number
Das Hintereinanderschalten von Funktionen lässt sich mit den Kompositionsoperatoren >>
und <<
direkt umsetzen.
> f x = x + 1
<function> : number -> number
> g x = 2 * x
<function> : number -> number
> f >> g
<function> : number -> number
> (f >> g) 3
8 : number
> g << f
<function> : number -> number
> (g << f) 3
8 : number
Denselben Effekt erreicht man mit den Pipe-Operatoren |>
und <|
. Mit diesen Operatoren legt man ebenfalls
das Weiterreichen von Rückgabedaten einer Vorgängerfunktion als Übergabedaten an eine Nachfolgerfunktion fest.
> ( \ x -> x |> f |> g )
<function> : number -> number
> ( \ x -> x |> f |> g ) 3
8 : number
> ( \ x -> g <| f <| x )
<function> : number -> number
> ( \ x -> g <| f <| x ) 3
8 : number
Nutzen von Funktionskomposition
Funktionskomposition ist essentiell in der funktionalen Programmierung. Automatisierungsprobleme werden in der Regel in kleinere Probleme zerlegt. Jedes Teilproblem wird mit Hilfe einer Funktion gelöst. Funktionskomposition wird benutzt, um die Teillösungen zu einer Gesamtlösung zusammenzubauen.
Funktionskomposition kann man auf unterschiedliche Weise implementieren: durch eine Verschachtelung von Funktionsaufrufen oder mit Hilfe von Kompositionsoperatoren. Die Operatoren helfen oft, die Komposition transparenter zu gestalten und die benutzten Ausdrücke lesbarer zu machen.