代数的データ型
代数的データ型
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/20 02:06 UTC 版)
Haskell のデータ型には代数的データ型と呼ばれる、C言語などでいう構造体や列挙体の性質を兼ね備えたものが用いられる。次の例は二つのInt型の値をフィールドに持つ二次元の座標、Point2D 型を定義したもので、これは代数的データ型の構造体的な性質を示す。先頭のトークン「data」は代数的データ型の宣言であることを示す予約語である。ここで最初の Point2D はデータ型名を表し、次の Point2D はデータコンストラクタ名を示す。 data Point2D = Point2D Int Intorigin :: Point2Dorigin = Point2D 0 0 -- データコンストラクタは関数のように適用できる データコンストラクタは値を定義するための特殊な関数といえる。データコンストラクタは後述するパターンマッチによって値を取り出す際にも用いられる。 次の例はトランプの4つのスーツを示す Suit 型を定義したものである。Spade、Heart、Club、Diamond の4つのデータコンストラクタが定義されており、Suit 型の式は Spade、Heart、Club、Diamond のいずれかの値をとる。 data Suit = Spade | Heart | Club | Diamond 次の例は String 型の値を格納する二分木の型である。Leaf(葉)は String 型の値を持ち、Branch(枝)は Leaf もしくは Branch である Tree 型の変数を二つ持つ。これは代数的データ型の構造体的な性質と列挙体的な性質の両方が現れている。 data Tree = Leaf String | Branch Tree Treeorganisms :: Treeorganisms = Branch animals plants -- Branch (Branch (Branch (Leaf "Lion") (Leaf "Tiger")) (Leaf "Wolf")) (Leaf "Cherry")animals = Branch cats (Leaf "Wolf")cats = Branch (Leaf "Lion") (Leaf "Tiger")plants = Leaf "Cherry" GADTと呼ばれる機能を使うと、コンストラクタの型を明示してデータ型を定義することもできる。 {-# LANGUAGE GADTs #-}data Maledata Femaledata Person s where Adam :: Person Male Eve :: Person Female Child :: Person Male -> Person Female -> Int -> Person a
※この「代数的データ型」の解説は、「Haskell」の解説の一部です。
「代数的データ型」を含む「Haskell」の記事については、「Haskell」の概要を参照ください。
固有名詞の分類
- 代数的データ型のページへのリンク