Две популярные формулировки:
-
Язык программирования, в котором функции можно передавать в качестве параметров или получать в результате выполнения функций:
- functions as first-class citizens
- higher-order functions
- очень доброе и широкое объяснение, включает "нефункциональные" языки - C, C++, C#, Java.
-
Язык, в котором написанная программа представляет собой функцию (в математическом смысле), а выполнение программы - вычисление функции.