# Starting with Erlang

by on October 17, 2011

Earlier last week we tried to use ejabberd at work for some testing. As part of that we had to apply a patch to the ejabberd sources in order to add some additional features we wanted to have.

Since there was no one really familiar with programming in Erlang I gave it a shot. After half an hour of reading in google on Erlang syntax we managed to patch the sources and add some additional logging information.

### Factorial function

Later at home I tried if I could come up with some basic functionality to kind of get a feeling for the language. A common example when starting to learn a new programming language is to implement the factorial function:

n! = \left\{
\begin{array}{l l}
1 & \quad \text{if $n = 0$}\\
n((n-1)!) & \quad \text{if $n > 0$}\\
\end{array}\right.

This is the first approach I came up with that uses recursion:

fact(0) -> 1;
fact(X) when X > 0 -> X * fact(X-1).

The more interesting way of solving the above problem is to use tail-recursion. That way the temporary processing values are stored in an accumulator argument of the function that is being called. Using tail-recursion it is not necessary that every step of the recursive function has to be hold up in the stack.

-module(factorial).
-export([fac/1]).

% API function that is being exporting
fac(N) -> fac(N,1).

% factorial function using tail-recursion
fac(0, Acc) -> Acc;
fac(N, Acc) when N > 0 -> fac(N-1, N*Acc).

This post is tagged with programming and erlang