2

私は論文を読んでいますGenerics of a Higher Kind、最初の文は

Java 5およびC#2.0では、ジェネリックスの名前で主流のオブジェクト指向プログラミング言語に一次パラメトリックポリモーフィズムが導入されました。

一次パラメトリック多型とは何か、一次関数とは何かもよくわかりません。高階関数とは、関数を受け取って関数を返す関数ですが、ゼロとは何かがわかりません。順序関数、一次関数。私はここから次のような説明を見ました:

f->gは0次
f->g->hは1次
f->g->h->iは2次
などです。

誰かが私のためにこれらの2つの用語を説明できますか?

4

1 に答える 1

6

高階(別名高階)パラメトリック多相の場合、最初の値には型があります。パラメトリック型を型関数(型の関数)の一種と考えると、型には種類があります。たとえば、次IEnumerable<T>の型関数です。種類*->*、この型関数に型を適用すると、種類*の型が得られます。したがって、型関数としてのパラメトリック型(型構築子)のこのビューを使用して、高階型関数、つまり型関数を引数として受け取る/返すことができる型関数について話し始めることができます。これは、より高度なポリモーフィズムとして知られており、JavaやC#などの言語に欠けている表現力の高い型システム機能です。C ++テンプレートについて知っている場合は、テンプレートテンプレートパラメータ(はい、テンプレートテンプレート)を介したそのようなものに対する制限はありますが、一貫性がなく、ほとんど役に立たないサポートがあります。

このような機能があるとなぜ便利なのか疑問に思われるかもしれません。それらは、より高いレベルの抽象化と、Monads&Functorsなどのより一般的なコードを表現することを可能にします。標準のHaskell98は、より種類の多いポリモーフィズムをサポートします。

1次関数の例では、最初に、ラムダ計算のすべての関数が1つの引数のみを取り、例の矢印が実際に右に関連付けられていることを理解する必要があります。これが実際の関数です。

f->gは0次です。f->(g-> h)は一次であり、関数は関数を返します。f->(g->(h-> i))は2次であり、関数は関数を返す関数を返します。

同じ「1つの引数のみ」は、type、kind、sorts(sortsを持つ種類)関数にも適用されます。

于 2011-03-19T16:16:35.273 に答える