Erlang is a functional programming language. One of the features in a function programming language is handling functions as data (functional objects).
In Erlang those functions are called funs. Funs are anonymous functions.
1> Fun = fun(X) -> X*X end. #Fun<erl_eval.6.52032458> 2> Fun(5). 25
Funs may also have several clauses.
3> AddOrMult = fun(add,X) -> X+X; 3> (mul,X) -> X*X 3> end. #Fun<erl_eval.12.52032458> 4> AddOrMult(mul,5). 25 5> AddOrMult(add,5). 10
You may also use module functions as funs with the syntax:
For example, lets take the function
lists module, which has arity 1.
6> Max = fun lists:max/1. #Fun<lists.max.1> 7> Max([1,3,5,9,2]). 9