Funktionen höherer Ordnung

Eine Funktion höherer Ordnung ist eine Funktion, die eine Funktion als Parameter erhält oder als Ergebnis liefern. Mit Funktionen höherer Ordnung kann es im Programm entschieden werden, welche Funktion auf bestimmte Werte ausgeführt werden. So kann es möglich sein, in Abhängigkeit von Werten andere Anweisungen anzuwenden.

Als Beispiel könnte eine Suchfunktion stehen, die nach einem Kriterium eine Liste von Ergebnissen aufbaut. Dieses Kriterium kann als bool'sche Funktion übergeben werden.

-- Funktion, die True zurückliefert, falls der Integer größer als 3 ist
vgl :: Int -> Bool
vgl a = a > 3
 
-- Funktion, die eine beliebige Int -> Bool Funktion anwendet und aus den
-- Ergebnissen eine Liste zusammensetzt.
search :: (Int -> Bool) -> [Int] -> [Int]
search _ [] = []
search f l = [x | x <- l , f x == True]
 
-- Aufruf
mymain :: [Int] 
mymain = search vgl [1..20]

Wir definieren uns eine Funktion, die überprüft, ob das übergeben Integer-Element größer als 3 ist. Als nächstes steht die Funktion search, die eine beliebige Funktion, die von Int nach Bool abbildet, annimmt. Außerdem eine Liste, auf die diese Funktion angewendet werden soll. search baut eine Liste von Integerwerten aus der übergebenen Liste auf, wenn die Ausführung der übergebenen Funktion mit dem Listenelement True zurückliefert.

Gehen wir etwas generischer vor, kann man den Wert, mit dem vgl vergleicht ebenfalls variabel gestalten:

-- Funktion, die True zurückliefert, falls der Integer größer als 3 ist
vgl :: Int -> Int -> Bool
vgl v a = a > v
 
-- Funktion, die eine beliebige Int -> Bool Funktion anwendet und aus den
-- Ergebnissen eine Liste zusammensetzt.
search :: (Int -> Bool) -> [Int] -> [Int]
search _ [] = []
search f l = [x | x <- l , f x == True]
 
-- Aufruf
mymain :: [Int] 
mymain = search (vgl 3) [1..20]

Es wird das gleiche Ergebnis zurückgeliefert. Der Unterschied ist, dass wir eine Funktion haben, die wir beim Übergeben bereits mit einem Parameter ausstatten.