Wer hat zuerst den Begriff Funktion höherer Ordnung und / oder Bürger erster Klasse geprägt?

9

Ich habe verstanden, dass Funktionen höherer Ordnung lange vor Haskell, O'Caml oder LISP ein akademisches Forschungsfach waren und Schönfinkel (1967) und Haskell Curry (1968) in der Mathematik bereits Techniken wie Curry anwenden, aber das war, bevor es in irgendeiner Programmiersprache verfügbar war.

Laut Wikipedia war das Schema die erste Sprache, die als erstklassige Bürger ordnungsgemäße Funktionen höherer Ordnung einführte. Aber gibt es jemanden, dem wir die ursprüngliche Idee zuschreiben können? Vielleicht Alonzo Church, der in den 1930er Jahren den Lambda-Kalkül erfunden hat? Genauer gesagt, wer hat die folgende Definition geprägt, die ich in verschiedenen Paraphrasen in mehreren Büchern und Online-Ressourcen gesehen habe?

Eine Funktion wird als höherwertig angesehen, wenn sie eine andere Funktion als Argument verwendet oder eine Funktion zurückgibt. Jede Funktion, die keine Funktionen als Argumente oder als Rückgabetypen verwendet, wird als Funktion erster Ordnung bezeichnet.

Abel
quelle
1
Du meinst Moses Schönfinkel? Dann müssen Sie sich 1967 in Bezug auf ihn irren . Er starb 1942 in Armut .
Petr Pudlák
Noch ist 1967 vor LISP. :-)
Jimwise

Antworten:

9

Frege sagt in "Funktion und Begriff" (1891):

Wie nun funktioniert von funktioniert grundverschieden sind sind, so sind auch Funktionen, ihre Funktionen funktionieren und sein müssen, Grundverschieden von Funktionen, ihre eigenen Zustände sind und nichts anders sein können. Diese nenne ich Funktionen erster, jene Funktionen zweiter Stufe.

In Englisch (meine Übersetzung):

So wie Dinge und Funktionen unterschiedlich sind, sind auch Funktionen unterschiedlich, deren Argumente sich grundlegend von Funktionen unterscheiden, deren Argumente Dinge sein müssen. Ich nenne die letzteren Funktionen erster Ordnung, die ersteren Funktionen zweiter Ordnung.

Ingo
quelle
1
tolles zitieren! Natürlich wäre es frege.
sclv
Interessant ist, dass die moderne funktionale Programmierung die entgegengesetzte Ansicht vertritt - so weit wie möglich (oder zumindest, wenn Sie in einer geschlossenen Kategorie arbeiten) gibt es keinen Unterschied zwischen Funktionen, deren Argumente Funktionen sind, und Funktionen, deren Argumente Dinge sein müssen.
Chris Taylor
Der Typechecker erinnert mich immer noch daran, wenn ich es verwechsle, @ChrisTaylor :)
Ingo
1
Funktionen sind auch Dinge, mein Freund. (Um Mitt Romney zu paraphrasieren.)
6.
1
Ich habe auch einmal einen Kurs in Logik gemacht und wir haben eine Definition für Domänen verwendet, die keinen Unterschied zwischen Konstanten und Funktionen gemacht haben: Eine Konstante (Wert) ist nur eine Funktion ohne Argumente, dh eine Funktion, deren Wert von keinem Eingabewert abhängt, und Daher enthält die Co-Domain nur einen Wert.
Giorgio
3

Der Wikipedia-Artikel schreibt Strachey bereits die Terminologie "erstklassige Bürger" zu.

"Funktion höherer Ordnung" würde ich mir vorstellen, geht auf die Unterscheidung zwischen Logik höherer Ordnung und Logik erster Ordnung zurück.

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

sclv
quelle
Ich bin mir nicht ganz sicher, ob Logik höherer Ordnung und Funktionen höherer Ordnung so leicht austauschbar sind. Danke, dass du auf Strachey hingewiesen hast, ich habe das irgendwie gelesen.
Abel
2
"Funktionen höherer Ordnung" existieren in der Arbeit von Frege (Funktionen, die beispielsweise Funktionen als Argumente verwenden), die weit vor der grundlegenden Arbeit der Kirche an der Lambda-Rechnung liegen. Ein Prädikat in der klassischen ersten oder Logik ist genau eine boolesche Funktion, daher schlage ich den Vorschlag von sclv vor, dass dies die Quelle der Terminologie sein könnte.
Philip JF