# Adventures In Erlang: predicate guards

Sometimes a function behaves differently based on it's inputs. Consider, for example, calculating the absolute value of a number. If the number is less than 0 then the result is `-1 * INPUT`

. If the number is greater than or equal to zero then the number is the same as the input.

This can be accomplished in Erlang using predicate guards: conditions on the inputs which are defined just after the argument list of a predicate.

```
-module(maths).
-export([abs/1]).
abs(X) when X < 0 -> -1 * X;
abs(X) -> X.
```

Of course Erlang does already provide a `math`

module which exports `abs`

. This is just a simple example of how to implement guards. It's also the reason that my module is called `maths`

instead of `math`

. Ick.

You can verify that I've written this post by following the verification instructions:

```
curl -LO http://barkingiguana.com/2008/09/10/adventures-in-erlang-predicate-guards.html.orig
curl -LO http://barkingiguana.com/2008/09/10/adventures-in-erlang-predicate-guards.html.orig.asc
gpg --verify adventures-in-erlang-predicate-guards.html.orig{.asc,}
```

If you'd like to have a conversation about this post, email craig@barkingiguana.com. I don't bite.