2.1. Match operator
Overview of Letlang's variable assignment
The match operator (:=
) is the simplest for of pattern matching in
Letlang.
It tries to match a left-hand side pattern to a right-hand side expression. If successful, the whole expression returns the value on the right-hand side. If the matching fails, a run-time error occurs.
The most simple example is to bind a single value to a single variable:
a := 1; # a is now bound to the value 1
a := 2; # a is now bound to the value 2
But we can also bind multiple variables at once using tuples:
(a, b) := (1, 2); # a is bound to 1, and b is bound to 2
Or structures:
{x: a, y: b} := {x: 1, y: 1}; # a is bound to 1, and b is bound to 2
Or lists:
[a, b] := [1, 2]; # a is bound to 1, and b is bound to 2
We can also extract the head and tail of a list using pattern matching:
[head | tail] := [1, 2, 3]; # head is bound to 1, and tail is bound to [2, 3]
Literal values can be used as a pattern:
(@ok, val) := (@ok, 42); # val is bound to 42
Because the match operator returns the right-hand side value, it can be chained:
(a, 2) := (1, b) := (1, 2); # a is bound to 1, and b is bound to 2
We can also match against an expression using $()
:
a := 1;
(@ok, $(a + 1)) := (@ok, 2);