I’ve come to understand that long before Haskell, O’Caml or LISP, higher order functions were an academic research subject and in mathematics, Schönfinkel (in 1967) and Haskell Curry (in 1968) already applied techniques such as currying, but that was before it was available in any programming language.
Scheme, according to Wikipedia, was the first language to introduce proper higher-order functions as first-class citizens, but is there anybody we can attribute the original idea to? Maybe Alonzo Church, who invented lambda calculus in the 1930’s? More specifically, who coined the following definition, which I saw in various paraphrases around in several books and online resources?
A function is considered to be of higher order when it takes another
function as an argument or when it returns a function. Any function
not taking functions as arguments or as return types is called a first
order function.
2
Frege says in “Funktion und Begriff” (1891):
Wie nun Funktionen von Gegenständen grundverschieden sind, so sind
auch Funktionen, deren Argumente Funktionen sind und sein müssen,
grundverschieden von Funktionen, deren Argumente Gegenstände sind und
nichts anderes sein können. Diese nenne ich Funktionen erster, jene
Funktionen zweiter Stufe.
In english (my translation):
Like things and functions are different, so are functions, whose arguments are functions radically different from functions whose arguments must be things. I call the latter functions of first order, the former functions of second order.
8
The wikipedia article already attributes the “first-class citizens” terminology to Strachey.
“Higher order function” I would imagine dates back to the distinction between higher order and first order logic.
See https://en.wikipedia.org/wiki/Higher-order_logic and http://plato.stanford.edu/entries/logic-higher-order/
2