funを使うと無名関数を作ることができる.
4> F = fun(X) -> X+1 end. #Fun<erl_eval.6.72228031> 5> F(1). 2 6> F(2). 3
これを使って高階関数を書くことができる.
例えばqsortに比較関数を指定できる.
qsort([], _) -> []; qsort([Pivot|Rest], Func) -> qsort([X || X <- Rest, Func(X, Pivot) >= 0], Func) ++ [Pivot] ++ qsort([X || X <- Rest, Func(X, Pivot) < 0], Func).
27> foo:qsort([1,4,3,2,5], fun(X, Y) -> X - Y end). [5,4,3,2,1]
mapも以下のように表現できる
map(_, []) -> []; map(Func, [Head|Tail]) -> [Func(Head) | map(Func, Tail)].
28> foo:map(fun(X) -> X*X end, [1,3,5]). [1,9,25]