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

19.4 レコード式 {⟨lab1⟩ = ⟨exp1⟩, …, ⟨labn⟩ = ⟨expn⟩}

レコード式はラベル⟨labi⟩と式⟨expi⟩の組みか らなるレコードフィールドの集合である.

レコード式は以下のように評価される.

  1. 1.

    レコード式のラベルがすべて異なるかチェックされ,同一のラベルが複 数現れれば,型エラーとなる.

  2. 2.

    次に,各式⟨expi⟩が,レコード式に出現する順に評価され,その 型⟨tyi⟩と値viが計算される.

  3. 3.

    それらを使い,ラベル文字列でソートされたコード型

    {⟨lab1′⟩ : ⟨ty1′⟩, …, ⟨labn′⟩ : ⟨tyn′⟩}

    とレコード値

    {⟨lab1′⟩ = v1′, …, ⟨labn′⟩ = vn′}

    が求められ,レコード式の型と値となる.

従って,例えば

val x = {SML = (print "SML#";"SML#"), IS = (print " is ";" is "), SHARP = (print " sharp!\n";" sharp!\n")}

を評価すると,"SML# is sharp!"とプリントされた後,

val x = {IS = " is ", SHARP = " sharp!\n", SML = "SML#"} : {IS: string, SHARP: string, SML: string}

のような型と値がxに束縛される.