Są różni.
Funkcje pierwszej klasy
Wartości w języku, które są obsługiwane jednolicie w całym języku, nazywane są „pierwszą klasą”. Mogą być przechowywane w strukturach danych, przekazywane jako argumenty lub używane w strukturach sterujących.
O językach, które obsługują wartości z typami funkcji i traktują je tak samo jak wartości niebędące funkcjami, można powiedzieć, że mają „funkcje pierwszej klasy”.
Funkcje wyższego rzędu
Jedną z konsekwencji posiadania funkcji pierwszej klasy jest to, że powinieneś być w stanie przekazać funkcję jako argument do innej funkcji. Ta ostatnia funkcja jest teraz „wyższego rzędu”. Jest to funkcja, która przyjmuje funkcję jako argument.
Przykład kanoniczny to „mapa”
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
Oznacza to, że pobiera funkcję i tablicę i zwraca nową tablicę z funkcją zastosowaną do każdego elementu.
Języki funkcyjne - języki, w których funkcje są podstawowym środkiem budowania programów - wszystkie mają funkcje pierwszej klasy. Większość ma również funkcje wyższego rzędu (bardzo rzadkimi wyjątkami są języki takie jak Excel, o którym można powiedzieć, że jest funkcjonalny, ale nie wyższego rzędu).