Кто первым придумал термин «функция высшего порядка» и / или «гражданин первого класса»?

9

Я понял, что задолго до Хаскелла, О'Камла или LISP функции высшего порядка были предметом академических исследований, а в математике Шенфинкель (в 1967 г.) и Хаскелль Карри (в 1968 г.) уже применяли такие методы, как карри, но был до того, как он был доступен на любом языке программирования.

Схема, согласно Википедии , была первым языком, который ввел надлежащие функции высшего порядка как первоклассные граждане, но есть ли кто-нибудь, кому мы можем приписать оригинальную идею? Может быть, Алонзо Черч, который изобрел лямбда-исчисление в 1930-х годах? В частности, кто придумал следующее определение, которое я видел в различных парафразах вокруг в нескольких книгах и онлайн-ресурсах?

Функция считается более высокого порядка, когда она принимает другую функцию в качестве аргумента или когда она возвращает функцию. Любая функция, не принимающая функции в качестве аргументов или возвращаемых типов, называется функцией первого порядка.

Абель
источник
1
Вы имеете в виду Моисея Шёнфинкеля? Тогда ты, должно быть, ошибаешься с ним в 1967 году . Он умер в бедности в 1942 году .
Петр Пудлак
И не 1967 года до LISP. :-)
Jimwise

Ответы:

9

Фреге говорит в «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 and seen kön. Diese nenne ich Funktionen erster, jene Funktionen zweiter Stufe.

На английском (мой перевод):

Как вещи и функции различны, так и функции, аргументы которых являются функциями, радикально отличающимися от функций, аргументы которых должны быть вещами. Я называю последние функции первого порядка первыми функциями второго порядка.

Инго
источник
1
отличный цитат! конечно это будет фреге.
sclv
Интересно, что современное функциональное программирование придерживается противоположной точки зрения - насколько это возможно (или, по крайней мере, всякий раз, когда вы работаете в закрытой категории), нет различия между функциями, аргументы которых являются функциями, и функциями, аргументы которых должны быть вещами.
Крис Тейлор
Проверка типов все еще напоминает мне, когда я все перепутал, @ChrisTaylor :)
Ingo
1
Функции тоже вещи, мой друг. (Перефразируя Митта Ромни.)
Augustss
1
Я когда-то тоже изучал логику, и мы использовали определение для областей, в которых не делалось различий между константами и функциями: константа (значение) - это просто функция без аргументов, т.е. функция, значение которой не зависит от какого-либо входного значения, и следовательно, совместный домен содержит только одно значение.
Джорджио
3

Статья в Википедии уже приписывает Стрейчи терминологию «первоклассные граждане».

«Функция более высокого порядка», я полагаю, восходит к различию между логикой высшего порядка и логикой первого порядка.

См. Https://en.wikipedia.org/wiki/Higher-order_logic и http://plato.stanford.edu/entries/logic-higher-order/

sclv
источник
Я не совсем уверен, что логика высшего порядка и функции высшего порядка взаимозаменяемы так легко. Спасибо за указание на Стрейчи, я как-то перечитал это.
Авель
2
«Функции высшего порядка» существуют в работе Фреге (функции, в которой функции, например, используются в качестве аргументов), намного предшествовавшей фундаментальной работе Черча по лямбда-исчислению. Предикат в классической логике первого порядка - это точно булевозначная функция, поэтому я предпочитаю, что это может быть источником терминологии.
Филипп JF