Są różne.
pierwszej klasy funkcje
wartości w języku, które są obsługiwane równomiernie nazywane są „pierwsza klasa”. Mogą być przechowywane w strukturach danych, przekazywane jako argumenty lub używane w strukturach kontrolnych.
Języki, które obsługują wartości z typami funkcji i traktują je tak samo jak wartości niefunkcjonalne, można powiedzieć, że mają "funkcje pierwszej klasy".
funkcja wyższego rzędu
Jedną z konsekwencji posiadające funkcje pierwszej klasy jest to, że powinieneś być w stanie przekazać funkcję jako argument do innej funkcji. Ta ostatnia funkcja jest teraz "wyższym rzędem". Jest to funkcja, która przyjmuje funkcję jako argument.
Klasycznym przykładem jest „map”
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
Oznacza to, że ma funkcję, oraz tablicę i zwraca nową tablicę funkcji stosowanej do każdego elementu.
Języki funkcjonalne - języki, w których funkcje są podstawowymi środkami budowania programów - wszystkie mają funkcje pierwszej klasy. Większość ma także funkcje wyższego rzędu (bardzo rzadkimi wyjątkami są języki takie jak Excel, które można uznać za funkcjonalne, ale nie w wyższej kolejności).
Myślę, że jedną rzecz łatwo mnie pogmatwać jest to, że są blisko spokrewnione. – Simon
@Simon Myślę, że kluczem do uniknięcia zamieszania jest pamiętanie, że język ma funkcje pierwszej klasy (możesz także mówić o innych "pierwszorzędnych" rzeczach, takich jak klasy pierwszej itd.), Lub nie . Więc nigdy nie mówisz o ** konkretnej funkcji ** o pierwszej klasie, czy też nie. OTOH, kiedy mówisz, że funkcja jest wyższego rzędu lub nie, to po prostu mówi, czy działa na funkcjach, czy też "wyższego rzędu" jest właściwością każdej pojedynczej funkcji. Zatem "ma funkcje pierwszej klasy" jest własnością języka, a "jest wyższym rzędem" jest własnością funkcji. – Ben
Dokładnie Ben. Myślałem, że te dwie są własnością dla funkcji, więc byłem zdezorientowany. Dzięki twoim komentarzom. – Simon