Haskellにおけるタプル
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/24 18:54 UTC 版)
「タプル」の記事における「Haskellにおけるタプル」の解説
ML系の関数型言語にほぼ共通して言えることとして、再帰的なデータ型であるリストとは異なり、タプルはそうでない点がある。また、リストの要素は単一の型のみを許容するのに対し、タプルの要素は型を問わない。これもデータ構造が再帰的か否かという点に由来するものである。また、要素へのアクセスはパターンマッチングか、先頭要素とその次の要素程度までを求める関数しかない。再帰的に定義されていないため、再帰関数で手繰ることも難しい(リストなら先頭と残りに分離することで容易に行える)。にもかかわらず、多くの関数型言語は60前後の要素まで許容されている。 Haskellでは、Pythonに類似した方法で利用できる部分もある。Pythonなどに影響を与えた側なので当然といえば当然である。 x = ('A', 1)(a, b) = x -- a には 'A'、b には 1 が入る。パターンマッチの例 アクセス関数としては、第1要素を取得するfstと、第2要素を取得するsndがある。 x = ('A', 1)a = fst x -- a には 'A' が入るb = snd x -- b には 1 が入る Haskellでは、2要素のタプルはデータ構築子 (,) で定義される。3要素なら (,,) で、最大の要素数は64であるため、これはカンマが63個並ぶことになる。以下はどちらも同じタプルが生成される。 x = ('A', 1)y = (,) 'A' 1 もちろんセクション(演算子の部分適用)も可能である。 x = (, 'A')f y = x -- y に1を与えたとすれば、fは (1, 'A') を返す セクションなどでは、要素数に応じた構築子を使わなければならない。たとえば要素数が3ならば f x y = (,,) x y 3-- これは以下と等価であるf x y = (x, y, 3) ユーティリティ関数としてcurryとuncurryが定義されている。いずれも2-tupleしか受け付けない。 curry id 'A' 1 -- id ('A', 1) と等価で、curryは ('A', 1) を返すuncurry (+) (1,42) -- (+) 1 42 と等価で、これは 1 + 42 とも等価であるから、uncurryは43を返す
※この「Haskellにおけるタプル」の解説は、「タプル」の解説の一部です。
「Haskellにおけるタプル」を含む「タプル」の記事については、「タプル」の概要を参照ください。
- Haskellにおけるタプルのページへのリンク