Factorial in Erlang

Example for versions erl 5.7.3

This example uses recursive factorial definition. Note that Erlang has no built-in loops, so the example uses a recursive function which starts with larger values of N, but calls itself for N-1 before printing N!. loop(_) is a clause that defines evaluation of loop() when its argument is not an integer or is negative; it is necessary for a proper function definition.

-export([main/0, loop/1]).
fact(0) -> 1;
fact(N) -> N * fact(N-1). 
loop(N) when is_integer(N), N>=0 -> 
    io:format("~B! = ~B~n",[N,fact(N)]);
loop(_) -> ok.
main() -> loop(16).