Search code examples
ocamlvariable-assignmentmutation

How do I save and change the value of a variable in OCaml?


This may be a very newbie question, but I didn't find the answer. I need to store, for example a list and later replace it with another, under the same pointer.


Solution

  • It can be done via references:

    let fact n =
      let result = ref 1 in (* initialize an int ref *)
      for i = 2 to n do
        result := i * !result (* reassign an int ref *)
       done;
      !result
    

    You do not see references very often because you can do the same thing using immutable values inside recursion or high-order functions:

    let fact n =
       let rec loop i acc =
          if i > n then acc
          else loop (i+1) (i*acc) in
       loop 2 1
    

    Side-effect free solutions are preferred since they are easier to reason about and easier to ensure correctness.