誰が最初に「高次関数」および/またはファーストクラスの市民という用語を作り出したのですか


9

Haskell、O'Caml、またはLISPが登場するずっと以前から、高次関数は学術研究の主題であり、数学ではSchönfinkel(1967年)とHaskell Curry(1968年)はすでにカレーなどの手法を適用していましたが、どのプログラミング言語でも利用できるようになる前でした。

Wikipediaよると、Scheme はファーストクラスの市民として適切な高階関数を導入した最初の言語でしたが、元のアイデアを私たちに帰すことができる人はいますか?たぶん、1930年代にラムダ計算を発明したアロンゾ教会ですか?より具体的には、私がいくつかの本やオンラインリソースでさまざまな言い換えで見た次の定義を誰が作り出したのですか?

関数が別の関数を引数として取る場合、または関数を返す場合、その関数は高次であると見なされます。関数を引数または戻り値の型として使用しない関数は、一次関数と呼ばれます。


1
モーゼスシェーンフィンケルのことですか?その後、1967年に彼について間違っている必要があります。彼は1942年に貧困で亡くなりました
PetrPudlák2013

1967年もLISPの前ではありません。:-)
jimwise 2013

回答:


9

Fregeは「Funktion und Begriff」(1891)で次のように述べています。

Wie nun Funktionen vonGegenständengrundverschieden sind、so sind auch Funktionen、deren Argumente Funktionen sind und seinmüssen、grundverschieden von Funktionen、deren ArgumenteGegenständesind und nichts anderes Diese nenne ich Funktionen erster、jene Funktionen zweiter Stufe。

英語(私の翻訳):

物事と関数が異なるように、引数も物事でなければならない関数と根本的に異なる関数である関数も異なります。後者の関数を1次、前者の関数を2次と呼びます。


1
素晴らしい引用!もちろんそれはフリージです。
sclv 2013

興味深いことに、現代の関数型プログラミングは反対の見方をしています-可能な限り(または、少なくとも閉じたカテゴリで作業しているときはいつでも)、引数が関数である関数と、引数が物でなければならない関数との間に区別はありません。
クリステイラー

タイプチェッカーは、@ ChrisTaylorを混同すると、私にまだ思い出させてくれます:)
Ingo

1
機能も重要です。(Mitt Romneyを言い換えると)
2013

1
私はかつてロジックのコースであり、定数と関数を区別しないドメインの定義を使用しました。定数(値)は、引数のない単なる関数です。つまり、値が入力値に依存しない関数であり、したがって、共同ドメインには値が1つだけ含まれます。
ジョルジオ

3

ウィキペディアの記事は、「ファーストクラスの市民」という用語をすでにStracheyに帰している。

「高次関数」私は高次と一次論理の区別にさかのぼる日付を想像します。

https://en.wikipedia.org/wiki/Higher-order_logicおよびhttp://plato.stanford.edu/entries/logic-higher-order/を参照してください


高次の論理と高次の関数がそれほど簡単に入れ替えられるかどうかは完全にはわかりません。Stracheyを指摘してくれてありがとう、なんとなく読みました。
アベル

2
「高次関数」は、フレーゲの仕事(たとえば、関数を引数として取る関数)に存在し、ラムダ計算に関する教会の基礎的な仕事よりもはるかに古い。古典的な最初の論理の述語は、まさにブール値の関数なので、これが用語のソースである可能性があるという2番目のsclvの提案です。
フィリップJF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.