(* -*- caml -*- *) let _ = let i = 1 in let i2 = i in (* no way to mutate nor call weird ++ or += *) let s = "hello" in let s2 = s in s2.[0] <- 'H' ; print_endline ("s2: " ^ s2) ; print_endline ("s : " ^ s) ; let l = [| "hello" ; "" |] in let l2 = l in l2.(1) <- "world"; print_endline ("l2: " ^ Array.fold_left (^) "" l2) ; print_endline ("l : " ^ Array.fold_left (^) "" l) ; ();; type struct_point = { mutable x: int ; mutable y: int ; } let show_struct_point p = Printf.sprintf "{ x = %d ; y = %d }" p.x p.y let _ = let sp = { x = 0 ; y = 1 } in let sp2 = sp in sp2.x <- sp2.x + 1 ; sp2.y <- sp2.y + 1 ; print_endline ("sp2: " ^ show_struct_point sp2) ; print_endline ("sp : " ^ show_struct_point sp) ; ();; class point x y = object val mutable x = x val mutable y = y method translate x' y' = x <- x + x' ; y <- x + y' method show = Printf.sprintf "Point(%d, %d)" x y end let _ = let p = new point 0 1 in let p2 = p in p2#translate 1 1 ; print_endline ("p2: " ^ p2#show) ; print_endline ("p : " ^ p#show) ; ();;