プログラミング言語SML#解説 4.0.0版
19

19.7 リスト式 [exp1, , expn]

リスト式は,[]の中にコンマで区切った式の値のリス トであり,リスト型のその値を生成する. リスト型は,予め以下のように定義されたデータ型である.

infixr 5 ::
datatype ’a list = op :: of ’a * ’a list | nil

リスト式は以下のように構文変換が行われ,その結果のネストしたコンストラクタ適用式が評価される.

変換前 変換後
[exp1,,expn] exp1 :: :: expn :: nil
(0n)

この変換から,リスト式の要素の式はすべて同じ型を持たなければなら ず,その型を要素の型とするリスト型ty listが,この式の型となり, ::(v1, ::(v2, ::(vn,nil)))の形の値がこの式の値 となることがわかる.

以下にリスト式の例を示す.

# [1, 2, 3, 4];
val it = [1, 2, 3, 4] : int list
# [fn x => x, fn x => x + 1];
val it = [fn, fn] : (int -> int) list
# [];
val it = [] : [’a. ’a list]

最後の例のように,[]は多相型を持つ空のリストである.