§ 8.4. フィールドの変更
SML#言語では,以下の構文によるレコードのフィールドの(関 数的)変更が定義されています.
この構文は,レコード式
# fun f modify x = x # {X = 3};
val f = _ : ['a#{X:'b}, 'b. 'a -> 'a]
この構文とレコードパターンを組み合わせた以下の形の関数は,レコー ドを扱うプログラムでよく登場するイディオムと言えます.
# fun reStructure (p as {Salary,...}) = p # {Salary=Salary * (1.0 - 0.0803)};
val f = _ : ['a#{Salary:real}. 'a -> 'a]
関数reStructureは,従業員レコードpを受け取り,その Salaryフィールドを8.03%減額する関数です. 型情報から理解されるとおり,この関数は,Salaryフィールドを 含む任意の従業員レコードに適用可能な,汎用の減額関数となっています.