谁首先创造了术语高阶职能和/或头等公民?


9

我已经了解到,早在Haskell,O'Caml或LISP之前,高阶函数是一门学术研究主题,在数学中,Schönfinkel(1967年)和Haskell Curry(1968年)已经应用了诸如咖喱粉之类的技术,但是在任何编程语言中都没有。

根据Wikipedia的说法, Scheme 是引入适当的高阶函数作为一等公民的第一门语言,但是有人可以将原始想法归因于此吗?也许是1930年代发明了lambda演算的Alonzo Church?更具体地说,谁创造了以下定义,我在几本书和在线资源的各种释义中看到了以下定义?

当一个函数将另一个函数作为参数或返回一个函数时,该函数被认为是更高阶的。任何不将函数用作参数或返回类型的函数都称为一阶函数。


1
你是说摩西·舍芬克尔?那1967年你对他一定是错误的。他于1942年因贫困去世
PetrPudlák13年

LISP也不早于1967年。:-)
jimwise

Answers:


9

弗雷格在《 Funktion und Begriff》(1891年)中说:

维恩·冯肯根斯坦·冯·根根斯坦恩·格伦德斯奇恩德(Fenngen)犯了罪,所以冯克恩根,德伦·阿古门特·冯克恩丁根和塞恩·穆森,德伦·阿尔根门德·冯根克丁恩,德仁·阿根门德·恩根斯坦恩·德恩·尼根斯和安德烈斯·塞恩·科恩都犯了罪。Diese nenne ich Funktionen erster,jene Funktionen zweiter Stufe。

用英语(我的翻译):

就像事物和函数是不同的一样,函数(其参数是函数)与参数必须是事物的函数也完全不同。我称后者为一阶函数,前者为二阶函数。


1
很好的引用!当然会很麻烦。
sclv

有趣的是,现代函数式编程采取了相反的观点-尽可能(或至少在您处于封闭类别时,无论何时)在以参数为函数的函数和以参数为事物的函数之间没有区别。
克里斯·泰勒

当我将它混合使用时,类型检查器仍会提醒我,@ ChrisTaylor :)
Ingo

1
功能也是东西,我的朋友。(改写米特·罗姆尼。)
2013年

1
我曾经也是一门逻辑课程,我们为域定义了一个定义,该定义在常量和函数之间没有区别:常量(值)只是一个没有参数的函数,即值不依赖于任何输入值的函数,以及因此,共域仅包含一个值。
Giorgio 2014年

3

维基百科文章已经将“头等公民”的术语归因于Strachey。

我想“高阶函数”可以追溯到高阶逻辑和一阶逻辑之间的区别。

参见https://en.wikipedia.org/wiki/Higher-order_logichttp://plato.stanford.edu/entries/logic-higher-order/


我不能完全确定高阶逻辑和高阶函数是否可以轻松互换。感谢您指出Strachey,我以某种方式阅读了该内容。
亚伯

2
弗雷格(Frege)的工作中存在“高阶函数”(例如,以函数为参数的函数),远远早于丘奇关于lambda演算的基础工作。经典的第一奇数逻辑中的谓词恰好是布尔值函数,因此我第二个sclv的建议是这可能是术语的来源。
菲利普·JF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.