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

19.7 リスト式 [⟨exp1⟩, ⋯, ⟨expn⟩]

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

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

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

変換前 変換後
[⟨exp1⟩,⋯,⟨expn⟩] ⟨exp1⟩ :: ⋯ :: ⟨expn⟩ :: nil
(0≤n)

この変換から,リスト式の要素の式はすべて同じ型を持たなければなら ず,その型を要素の型とするリスト型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]

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