В чем разница: функции первого класса и функции высшего порядка?
==================================================================

 В языках программирования есть такое понятия как: [first-class functions - функции первого класса](https://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0), [higher order functions - функции высшего порядка](https://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F_%D0%B2%D1%8B%D1%81%D1%88%D0%B5%D0%B3%D0%BE_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0).  
  

После прочтения определений, непонятно в чем разница, или это синонимы? 

 Функции высшего порядка -- функции, которые могут принимать другие функции и возвращать функции. first-class functions -- фича языка, позволяющая переменным содержать ссылки на функции. По сути -- разные вещи, но по отдельности смысла в них не много:) 

 Погуглить слабо?  
  

> Функция высшего порядка, в отличие от функции первого порядка, имеет один из трёх видов:  
>   
> 
> 1. Один из параметров функции также является функцией и она возвращает значение.  
> 
> 2. Она возвращает функцию, но ни один из параметров не является функцией.  
> 
> 3. И первый и второй пункт: функция возвращает функцию и один из параметров является функцией.  
> 

  

Источник: [https://github.com/anton-k/ru-neophyte-guide-to-sc...](https://github.com/anton-k/ru-neophyte-guide-to-scala/blob/master/src/p10-hof.md)  
  

Таким образом, функция высшего порядка должна возвращать функцию и/или принимать одну функцию в параметр