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