wmfarmer% ocaml Objective Caml version 3.08.0 # let x = ref 8 ;; val x : int ref = {contents = 8} # let y = ref 9 ;; val y : int ref = {contents = 9} # x == y ;; - : bool = false # let x = y ;; val x : int ref = {contents = 9} # x == y ;; - : bool = true # x := 34 ;; - : unit = () # !y ;; - : int = 34 # let simple_sum m n = let accum = ref 0 in for i = m to n do accum := !accum + i ; print_int !accum ; print_newline () done; !accum ;; val simple_sum : int -> int -> int = # simple_sum 1 4 ;; 1 3 6 10 - : int = 10 # simple_sum (-4) 4 ;; -4 -7 -9 -10 -10 -9 -7 -4 0 - : int = 0 # let sum f m n = let accum = ref 0 in for i = m to n do accum := !accum + (f i) ; print_int !accum ; print_newline () done; !accum ;; val sum : (int -> int) -> int -> int -> int = # sum (function x -> x * x) 0 3 ;; 0 1 5 14 - : int = 14 # sum (function x -> x * x - 4 + x) 0 3 ;; -4 -6 -4 4 - : int = 4 # sum (function x -> x * x - 4 + x) 0 (-6) ;; - : int = 0 # let super_sum zero add f m n = let accum = ref zero in for i = m to n do accum := add !accum (f i) ; done; !accum ;; val super_sum : 'a -> ('a -> 'b -> 'a) -> (int -> 'b) -> int -> int -> 'a = # super_sum 0 ( + ) (function x -> x * x) 0 3 ;; - : int = 14 # let g = (function x -> x * x) ;; val g : int -> int = # super_sum 0 ( + ) g 0 3 ;; - : int = 14 # let factorial = super_sum 1 ( * ) (function x -> x) 1 ;; val factorial : int -> int = # factorial 4 ;; - : int = 24 # factorial 5 ;; - : int = 120 # super_sum "" ( ^ ) (function x -> "abc") 1 3 ;; - : string = "abcabcabc" # super_sum ;; - : 'a -> ('a -> 'b -> 'a) -> (int -> 'b) -> int -> int -> 'a = # let rec simple_sum_rec m n = if m > n then 0 else m + (simple_sum_rec (m + 1) n) ;; val simple_sum_rec : int -> int -> int = # simple_sum_rec 0 100 ;; - : int = 5050 # simple_sum_rec (-60) 60 ;; - : int = 0 #