多相的関数とパラメトリック多相

次の関数 thrd は3要素のタプルを引数にとって,3番目の要素を返す。

# let thrd (x, y, z) = z;;
val thrd : 'a * 'b * 'c -> 'c = <fun>

この, ‘a,’b,’c を型変数といい,thrd を適用するときには具体的にどんな型がきてもいい。つまり引数のタプルの各要素が,int であっても string であってもそれ以外のどんな型であってもいいってこと。

thrd のように型に関して抽象化された関数を多相的関数という。また,関数の型情報の一部をパラメータ化することによって発生する多相性をパラメトリック多相という。

# thrd ("foo", 2, 3.0);;
- : float = 3.
# thrd ('1', 2.0, (3, "three"));;
- : int * string = (3, "three")

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください