Sometimes a function needs to behave differently depending on its inputs. Consider calculating the absolute value of a number: if the number is less than zero, you multiply by -1; if it’s zero or greater, you return it unchanged.

In Erlang, you handle this with predicate guards, conditions on the inputs defined right after the argument list:
-module(maths).
-export([abs/1]).
abs(X) when X < 0 -> -1 * X;
abs(X) -> X.
The when X < 0 part is the guard. If it evaluates to true, that clause matches. Otherwise, Erlang falls through to the next clause, which in this case has no guard and matches everything.
Erlang already provides a built-in abs function in its math module, of course. This is just a simple illustration of how guards work, and the reason my module is called maths instead of math. Naming collisions: the eternal struggle.