てきとうなメモ

本の感想とか技術メモとか

funと高階関数

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]