OCaml reference types.
(* C:\Documents and Settings\Default\Desktop\4651\examples\references.ml *)
let x = ref 5;;
x := !x + 1;;
x;;
(* a record with two mutable fields *)
type changeme = {mutable n: int; mutable s: string};;
let y = {n = 3; s = "apple"};;
y.s <- "banana";;
y;;
let sum = ref 0;;
(* find_sum modifies a global mutable variable sum *)
(* () is the unit element, represents "do nothing" *)
let rec find_sum = function
[] -> ()
| x :: xs -> sum := !sum + x; find_sum xs;;
let l = [2; 7; 9];;
find_sum l;;
sum;;
sum := 0;;
find_sum [];;
sum;;
sum := 0;;
find_sum [1; 2 ; 4; 8; -7];;
sum;;
(* references cells can reference polymorphic types *)
type poly = {mutable f : 'a. 'a -> 'a * int};;
let pair = {f = function x -> (x, 3)};;
pair.f 5;;
pair.f true;;
pair.f <- function x -> (x, 6);;
pair.f 5;;
pair.f true;;
This is an example from CSci 4651 course.