If you have worked with other languages like JavaScript, Java, Python etc, you would be surprised by what Erlang understands as variable.
In Erlang, variables starts with uppercase letter, thus, C
, X
, Ape
, Ant
are all valid identifiers for Erlang variables.
Variables can not start with lowercase letter or begin with a number.
Erlang variables can include can alphanumeric characters, an underscore and @ symbol.
X = 1. %% Valid
y = 2. %% Invalid
1X = 2. %% Invalid
When assigning to a variable - as we do call it in other languages, Erlang actually does something called pattern matching. Comparing the values on the right to the values on the left.
A pattern match would only succeed if the two operands match.
Thus, in Erlang, a variable get assigned to if it is either unbound
or has the same value as the value at the right.
The =
is a special symbol that does not do assignment but makes the pattern matching operation to be successful if its conditions are met.
Hence, in Erlang =
is known as a pattern match operator which evaluates the value of the right hand side (RHS) then matching the result with the left hand side (LHS)
X = 1. %% successful
Y = 2. %% successful
Z = X + 1. %% successful, Z is unbound to
Z. %% => 3
Z = 3 %% successful, Z is now 3, but, we want it to have the value 3
Z = 4 %% fails, Z is already holding 3, and 4 won't match against it.
There is nothing as global or private scope in Erlang, all variables are lexically scoped and are unrelated even if they exists in different functions;
Continue to the next post on Erlang Learning: Erlang Pattern Matching
Ciao!