A variable is a location in memory where you can store a value. Here is how a variable is created in OCaml:
let x = 3;;
The let keyword indicates that we define a variable. Then follow the name of the variable, x , which is set to a value, 3 . The variable is defined globally (it is accessible from everywhere) and is immutable (its value cannot be changed)
A variable can also be defined locally:
(* We define a local x variable *) let x = 3 in x + 4;; (* Here we have an error *) x + 4;;
In the first expression, we define a variable, x, available in everything following the in keyword, until a ;; is reached. So x + 4 evaluates to 7 . However, in the second expression, x is not defined, because it was declared locally in the other expression. So we will have an error.
There are different types of variables in OCaml. In the previous example, x was an integer, known as the int type. Here are basic types of variables available in OCaml:
let x = 3;; (* int *) let y = 3.0;; (* float *) let test = true;; (* bool *) let txt = "Hello";; (* string *) let a = 'a';; (* char *) let empty = ();; (* unit *)
int and float types represent integrers and floating point numbers.
bool represents boolean values, true or false.
string represents string, a succession of characters.
char represents a single character.
Note that a character is defined with single quotes, while a string is defined with double quotes.
Finally, unit is the type representing nothing.
We can declare mutable variables, called references:
let x = ref 3;;
Here, x is not containing the value 3, but a reference to the value 3. That way, we can change the value that x points to, which is not possible with a classic variable. References can be useful for loops where you need to increment a value for each round, for example.
let x = ref 3;; x := 4;; (* 1 *) x;; (* 2 *) !x;; (* 3 *)
The statement 1 set the value of the reference to 4. Note the usage of := instead of = to set the value to the reference instead of the value to the variable (which won’t work). The statement 2 returns the reference (of type int ref ), while the statement 3 returns the value of the reference (here 4 , of type int ).