Chapter 4. データ型

Table of Contents
パターン
パターンマッチ
マッチ節とケース式
列挙データ型
再帰的に定義されたデータ型
網羅的なパターンマッチ
例: 2分探索木
例: 整数式の評価

ATS におけるデータ型の機能は ML の影響を強く受けています。

データ型はタグ付きの共用体に似ています。 それぞれのデータ型には関連するコンストラクタがあり、 それらのコンストラクタはデータ型の値をコンストラクトしなければなりません。 例として次の構文は intopt という名前のデータ型を宣言しています:

datatype intopt = | intopt_none of () | intopt_some of (int) // end of [intopt]

intopt に関連した2つのコンストラクタが存在します: 引数のない intopt_none と1引数の intopt_some です。 例えば intopt_none()intopt_some(1) は両方とも intopt 型の値です。 そのような値の中の要素にアクセスするために、パターンマッチと呼ばれる仕組みを ATS では提供しています。 データ型とパターンマッチの組み合わせが、 プログラミングにおいて大変便利であるだけでなくコードを明快にもしてくれることを、 例を通して説明しようと思います。

この章で示すコードとテストのための追加コードは オンライン から入手できます。

パターン

ATS におけるパターンは次のように帰納的に定義されています:

与えられたパターンの中でそれぞれの変数は最大で一度までしか登場できません。 これはパターン中の値の線形性制限 (linearity restriction) と呼ばれています。 例えば (x, x) は変数xが二度現われるため、正しいパターンではありません。 けれどもこの制限はワイルドカードパターンである変数 _ にはあてはまりません。