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
).