プログラミング言語SML#解説 3.7.1版
7 MLプログラミング入門

7.13 変更可能なメモリーセルを表す参照型

MLには,以下の型と関数が組み込まれています.

type ’a ref
val ref : ’a -> ’a ref
val ! : ’a ref -> ’a
val := : ’a ref * ’a -> unit

’a refは「’aの値への参照」を表す型です. 参照とはポインタのことです. 関数refは,任意の型’aの値を受け取り,その値への参照 を作成し返す関数です. 関数!は,参照を受け取りそれが指す値を返す関数です. 関数:=は代入を行う関数,すなわち,参照と値を受け取り,参照 が指す値を受け取った値に変更する関数です. 以下は,参照型を使用した対話型セッションの例です.

# val x = ref 1;
val x = ref 1 : int ref
# !x;
val it = 1 : int
# x := 2;
val it = () : unit
# !x;
val it = 2 : int

この参照型を,状態を参照として保持することにより状態に依存する処 理などの本質的に手続き的な処理を,通常の関数として書くことができます.