Funktion höherer Ordnung
Eine Funktion höherer Ordnung (englisch higher-order function) ist in der Informatik eine Funktion, die Funktionen als Argumente erhält und/oder Funktionen als Ergebnis liefert.
Der Begriff wird insbesondere im Lambda-Kalkül verwendet, der theoretischen Grundlage der Funktionalen Programmierung. Dort ist er eng mit dem Currying verbunden, einem Verfahren, das Funktionen mit mehreren Argumenten in mehrere einparametrige Funktionen umwandelt. Diese Transformation hat ihre Grundlage darin, dass für beliebige Mengen die Funktionenräume und miteinander identifiziert werden können.
Folgende Funktion ist eine Funktion höherer Ordnung:
Diese Funktion bildet jeden -Wert auf eine Funktion ab, die eine (übergebene) natürliche Zahl zu addiert. Beispielsweise . wird wiederum auf abgebildet:
Aus dem Lambda-Kalkül stammt der K-Kombinator . ist für alle konstant.
Ein bekanntes Beispiel für eine Funktion höherer Ordnung ist der Differentialoperator, weil er Funktionen auf Funktionen abbildet (Ableitung und Stammfunktion). Weitere wichtige Beispiele sind die so genannten Distributionen. Im Fall mit ist ein -Vektorraum und daher ist ein Funktional.
Beispiel aus der funktionalen Programmierung
In den meisten funktionalen Programmiersprachen, wie z. B. Haskell, ist die Funktion höherer Ordnung map
definierbar. Sie erhält als Argument eine Funktion f
und gibt eine Funktion zurück, die f
auf jedes Element einer übergebenen Liste anwendet. Es ist zu beachten, dass map
Funktionen beliebigen Typs als Argument erhalten kann (angedeutet durch die Typvariablen a
und b
).
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = (f x):map f xs
map (\x -> x ^ 2) [1, 2, 3, 4] -- wird ausgewertet zu [1, 4, 9, 16]
In einer multiparadigmatischen Programmiersprache wie Wolfram Language kann eine Funktion höherer Ordnung folgendermaßen aussehen:
In[1]:= Nest[# + 3 &, 7, 2]
Out[1]:= 13
Weblinks
- Simon Thompson: Type Theory and Functional Programming. (PDF; 1,3 MB)