Kto pierwszy ukuł termin funkcja wyższego rzędu i / lub obywatel pierwszej klasy?

9

Zrozumiałem, że na długo przed Haskell, O'Caml lub LISP funkcje wyższego rzędu były przedmiotem badań akademickich, a w matematyce Schönfinkel (w 1967 r.) I Haskell Curry (w 1968 r.) Stosowali już techniki takie jak curry, ale że było zanim było dostępne w dowolnym języku programowania.

Schemat, według Wikipedii , był pierwszym językiem wprowadzić odpowiednie funkcje wyższego rzędu jako obywateli pierwszej klasy, ale jest tam ktoś możemy przypisywać oryginalny pomysł? Może Alonzo Church, który wynalazł rachunek lambda w latach 30. XX wieku? Mówiąc dokładniej, kto wymyślił następującą definicję, którą zobaczyłem w różnych parafrazach w kilku książkach i zasobach internetowych?

Funkcja jest uważana za wyższą, gdy bierze inną funkcję jako argument lub gdy zwraca funkcję. Każda funkcja, która nie przyjmuje funkcji jako argumentów lub typów zwracanych, nazywana jest funkcją pierwszego rzędu.

Abel
źródło
1
Masz na myśli Mojżesza Schönfinkela? Więc musisz się mylić co do niego w 1967 roku . Zmarł w biedzie w 1942 r .
Petr Pudlák
Ani rok 1967 przed LISP. :-)
jimwise

Odpowiedzi:

9

Frege mówi w „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.

W języku angielskim (moje tłumaczenie):

Rzeczy i funkcje są różne, podobnie jak funkcje, których argumenty są funkcjami radykalnie odmiennymi od funkcji, których argumentami muszą być rzeczy. Nazywam te ostatnie funkcje pierwszego rzędu, poprzednie funkcje drugiego rzędu.

Ingo
źródło
1
świetne cytowanie! oczywiście byłoby uwolnienie.
sclv
Interesujące jest to, że współczesne programowanie funkcjonalne ma odwrotny pogląd - o ile to możliwe (a przynajmniej za każdym razem, gdy pracujesz w zamkniętej kategorii), nie ma rozróżnienia między funkcjami, których argumentami są funkcje, a funkcjami, których argumentami muszą być rzeczy.
Chris Taylor,
Sprawdzanie maszyn wciąż mi przypomina, kiedy go pomieszam, @ChrisTaylor :)
Ingo
1
Funkcje też są, mój przyjacielu. (Parafrazując Mitt Romney.)
sierpień
1
Ja też kiedyś kurs logiki i zastosowaliśmy definicję dla domen, które nie wprowadziły rozróżnienia między stałymi a funkcjami: stała (wartość) jest po prostu funkcją bez argumentów, tj. Funkcją, której wartość nie zależy od żadnej wartości wejściowej, i dlatego domena zawiera tylko jedną wartość.
Giorgio
3

Artykuł w Wikipedii przypisuje już Stracheyowi terminologię „obywateli pierwszej klasy”.

„Funkcja wyższego rzędu” Wyobrażam sobie, że sięga rozróżnienia między logiką wyższego rzędu a logiką pierwszego rzędu.

Zobacz https://en.wikipedia.org/wiki/Higher-order_logic i http://plato.stanford.edu/entries/logic-higher-order/

sclv
źródło
Nie jestem do końca pewien, czy funkcje logiczne wyższego rzędu i funkcje wyższego rzędu są tak łatwo wymienne. Dzięki za zwrócenie uwagi na Strachey, jakoś to przeczytałem.
Abel
2
„Funkcje wyższego rzędu” istnieją w pracy Frege'a (funkcje przyjmujące funkcje jako argumenty na przykład), znacznie wyprzedzające fundamentalną pracę Kościoła nad rachunkiem lambda. Predykat w klasycznej logice pierwszej odry jest dokładnie funkcją o wartości boolowskiej, dlatego w drugiej kolejności sugeruję sclv, że może to być źródło terminologii.
Philip JF,