Pattern matching¶
Functions in Disco can be defined using pattern matching, which in general looks like this:
f(pattern) = expression
This means, roughly, “if the input to the function f
looks like
pattern
, then the output of f
on that input should be
expression
.” For example, f(5) = 29
means that if the input
to f
is the number 5
, then the output should be 29
.
Functions can be defined by multiple pattern-match clauses; Disco tries the clauses in order, one by one, and picks the first one that matches. (Note that case expressions can also be used to define functions, in case more sophisticated logic is needed.) For example,
f(2) = 12
f(2k) = k+1
f(n) = 2n+1
means:
- First, if the input to
f
is specifically2
, then return12
; - next, if the input to
f
is even (i.e. of the form2k
for some integerk
), returnk+1
; - finally, for any other input, which we will call
n
, return2n+1
.
(If none of the clauses in a function definition matches an input, it is an error: see Value did not match any of the branches in a case expression.)
The above example uses a literal pattern, an arithmetic pattern, and a variable pattern; see the links below for more specific information about the different types of patterns that can be used.