Qui a d'abord inventé le terme Fonction d'ordre supérieur et / ou Citoyen de première classe?


9

J'ai compris que bien avant Haskell, O'Caml ou LISP, les fonctions d'ordre supérieur étaient un sujet de recherche universitaire et en mathématiques, Schönfinkel (en 1967) et Haskell Curry (en 1968) appliquaient déjà des techniques telles que le curry, mais que était avant qu'il ne soit disponible dans n'importe quel langage de programmation.

Le schéma, selon Wikipedia , a été la première langue à introduire des fonctions appropriées d'ordre supérieur en tant que citoyens de première classe, mais y a-t-il quelqu'un à qui attribuer l'idée originale? Peut-être l'église Alonzo, qui a inventé le calcul lambda dans les années 1930? Plus précisément, qui a inventé la définition suivante, que j'ai vue dans diverses paraphrases dans plusieurs livres et ressources en ligne?

Une fonction est considérée comme étant d'ordre supérieur lorsqu'elle prend une autre fonction en argument ou lorsqu'elle renvoie une fonction. Toute fonction ne prenant pas de fonctions comme arguments ou comme types de retour est appelée fonction de premier ordre.


1
Tu veux dire Moses Schönfinkel? Alors vous devez vous tromper sur lui en 1967 . Il est décédé dans la pauvreté en 1942 .
Petr Pudlák

1967 n'est pas non plus devant LISP. :-)
jimwise

Réponses:


9

Frege dit dans "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.

En anglais (ma traduction):

Tout comme les choses et les fonctions sont différentes, les fonctions dont les arguments sont des fonctions radicalement différentes des fonctions dont les arguments doivent être des choses sont également différentes. J'appelle ces dernières fonctions de premier ordre, les anciennes fonctions de second ordre.


1
grande citation! bien sûr, ce serait frege.
sclv

Il est intéressant de noter que la programmation fonctionnelle moderne adopte le point de vue opposé - dans la mesure du possible (ou du moins, lorsque vous travaillez dans une catégorie fermée), il n'y a pas de distinction entre les fonctions dont les arguments sont des fonctions et les fonctions dont les arguments doivent être des choses.
Chris Taylor

Le vérificateur de frappe me rappelle toujours quand je le mélange, @ChrisTaylor :)
Ingo

1
Les fonctions sont aussi des choses, mon ami. (Pour paraphraser Mitt Romney.)
août

1
J'ai une fois de plus un cours de logique et nous avons utilisé une définition de domaines qui ne faisait aucune distinction entre constantes et fonctions: une constante (valeur) est juste une fonction sans arguments, c'est-à-dire une fonction dont la valeur ne dépend d'aucune valeur d'entrée, et par conséquent, le co-domaine ne contient qu'une seule valeur.
Giorgio

3

L'article de wikipedia attribue déjà la terminologie des «citoyens de première classe» à Strachey.

"Fonction d'ordre supérieur" J'imagine que cela remonte à la distinction entre la logique d'ordre supérieur et la logique du premier ordre.

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


Je ne suis pas tout à fait certain que la logique d'ordre supérieur et les fonctions d'ordre supérieur soient interchangeables si facilement. Merci d'avoir signalé Strachey, j'ai relu en quelque sorte.
Abel

2
Les «fonctions d'ordre supérieur» existent dans les travaux de Frege (les fonctions prenant des fonctions comme arguments par exemple), bien avant les travaux fondateurs de Church sur le calcul lambda. Un prédicat dans la logique classique de première odeur est exactement une fonction à valeur booléenne, donc je seconde la suggestion de sclv selon laquelle cela pourrait être la source de la terminologie.
Philip JF
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.