ocaml Objective Caml version 3.04 # 1;; - : int = 1 # 1 + 2;; - : int = 3 # 1.0;; - : float = 1 # 1.0 + 2;; Toplevel input: # 1.0 + 2;; ^^^ This expression has type float but is here used with type int # "Hello";; - : string = "Hello" # let i = 1;; val i : int = 1 # let i = 1 + 2;; val i : int = 3 # let j = j + j;; Toplevel input: # let j = j + j;; ^ Unbound value j # let i = 1;; val i : int = 1 # let i = i + i;; val i : int = 2 # let j = i;; val j : int = 2 # let i = 4;; val i : int = 4 # j;; - : int = 2 # let s = "Hello";; val s : string = "Hello" # s.[3];; - : char = 'l' # s.[3] <- 'x';; - : unit = () # ();; - : unit = () # s;; - : string = "Helxo" # "Hello" ^ "World";; - : string = "HelloWorld" # let f = (fun i j -> i + j);; val f : int -> int -> int = # f 2 3;; - : int = 5 # let add1 = f 1;; val add1 : int -> int = # let sub1 = f 1;; val sub1 : int -> int = # sub1 5;; - : int = 6 # let x = 7;; val x : int = 7 # let f = (fun y -> x + y);; val f : int -> int = # f 4;; - : int = 11 # let x = 12;; val x : int = 12 # f 4;; - : int = 11 # let g y = x + y;; val g : int -> int = # g 4;; - : int = 16 # f 4;; - : int = 11 # let fact i = if i = 0 then 1 else i * (fact (i - 1));; Toplevel input: # let fact i = if i = 0 then 1 else i * (fact (i - 1));; ^^^^ Unbound value fact # let rec fact i = if i = 0 then 1 else i * (fact (i - 1));; ;; Toplevel input: # let rec fact i = ;; ^^ Syntax error # let rec fact i = if i = 0 then 1 else i * fact(i - 1);; val fact : int -> int = # fact 10;; - : int = 3628800 # let rec f i = i * g (i - 1) and g j = j;; val f : int -> int = val g : int -> int = # f 2;; - : int = 2 # i = 5;; - : bool = false # i;; - : int = 4 # i = 4;; - : bool = true # i <- 5;; Toplevel input: # i <- 5;; ^^^^^^ Unbound instance variable i # 1, 2;; - : int * int = 1, 2 # 1, 2.0;; - : int * float = 1, 2 # 3, "Hello", f;; - : int * string * (int -> int) = 3, "Hello", # let f (x, y) = x + y;; val f : int * int -> int = # f (1, 2);; - : int = 3 # f (1, "Hello");; Toplevel input: # f (1, "Hello");; ^^^^^^^^^^ This expression has type int * string but is here used with type int * int # let fst (x, y) = x;; val fst : 'a * 'b -> 'a = # let x = 1, 2;; val x : int * int = 1, 2 # fst x;; - : int = 1 # let y = "Hello", "World";; val y : string * string = "Hello", "World" # fst y;; - : string = "Hello" #