参照型

参照型を使えば、値を変更可能(mutable)にできます。 (正確には、束縛した値は変わらないのですが 束縛した値の参照先の値の変更が可能になります) 値を参照型に変更するにはrefを使います。 また、!参照型とすることで、値の参照が、 参照型:=値とすることで値の変更を行うことができます。 この'a ref型はMicrosoft.FSharp.Core.Ref<'a>型のシノニムになっています。
参照型の利用
//参照型の値をaに束縛
let a = ref "hello";;
//aの値を参照
!a ^ " world";;
//aの値を変更
a := "hi";;
//aの値を参照
!a ^ " world";;
実行結果
> let a = ref "hello";;
val a : string ref
> !a ^ " world";;
val it : string = "hello world"
> a:="hi";;
val it : unit = ()
> !a ^ " world";;
val it : string = "hi world"
!a ^ " world"の実行結果に注目すると 同じ式であるにも関わらず実行結果が異なっています。 これは参照型を用いると値が変更できる(=副作用を持つ)ためです。 このように、副作用があると 「同じ式は同じ値を持つ」 という性質は失われてしまいます。 その他、並列処理なども記述が難しくなるなど 副作用にはデメリットが多く 関数型プログラミングでは一般に 副作用のあるプログラムは嫌われるようです。