Son diferentes.
funciones de primera clase
valores en un lenguaje que se manejan de manera uniforme a lo largo son llamados "de primera clase". Se pueden almacenar en estructuras de datos, pasar como argumentos o usarse en estructuras de control.
Se puede decir que los lenguajes que admiten valores con tipos de funciones y los tratan igual que los valores sin función tienen "funciones de primera clase".
funciones de orden superior
Una de las consecuencias de tener funciones de primera clase es que usted debería ser capaz de pasar una función como argumento a otra función. La última función ahora es "orden superior". Es una función que toma una función como argumento.
El ejemplo canónico es "mapa"
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
Esto es, se necesita una función, y una matriz, y devuelve una nueva matriz con la función aplicada a cada elemento.
Idiomas funcionales: idiomas en los que las funciones son el principal medio para crear programas: todos tienen funciones de primera clase. La mayoría también tienen funciones de orden superior (excepciones muy raras son idiomas como Excel, que puede decirse que es funcional, pero no de orden superior).
Creo que una cosa que me confunde fácilmente es que están estrechamente relacionados. – Simon
@Simon Creo que la clave para evitar confusiones es recordar que un idioma tiene funciones de primera clase (también se puede hablar de otras cosas de primera clase, como clases de primera clase, etc.), o no . Entonces nunca se habla de ** una función particular ** siendo de primera clase o no. OTOH, cuando dices que una función es de orden superior o no, solo dice si opera o no en funciones, por lo que "orden superior" es una propiedad de cada función individual. Por lo tanto, "tiene funciones de primera clase" es una propiedad de un idioma, y "es de orden superior" es una propiedad de una función. – Ben
Exactamente Ben. Estaba pensando que esos dos son propiedad de la función, por lo tanto, estaba confundido. Gracias tus comentarios – Simon