2012年1月11日水曜日

Erlang arrayモジュール まとめ(foldl)

今日は、arrayモジュールのfoldlについて

foldは英語で折りたたむという意味。
よって、arrayプロセス内の値を引数に与えられたFunctionで計算して、1つの値を出力する。

foldlのlはleftなので、arrayのindex = 0から順に計算する。

■foldl(Function, InitialAcc::term(), Array::array()) -> term()

 Function = (Index::integer(), Value::term(), Acc::term()) -> term()

初期値と与えられたFunctionを使用し、arrayの値をFoldする。値はインデックスの低いほうから、高い方へ順に移動する。

もし、Functionが関数でない場合、badargエラーとなる。

【実行例】
1> A0 = [1,2,3,4,5].
[1,2,3,4,5]
2> A1 = array:from_list(A0,0).
{array,5,10,0,{1,2,3,4,5,0,0,0,0,0}}
3> Fun = func(Index,Value,Sum) -> Index + Sum end.
* 1: syntax error before: '->'
3> Fun = fun(Index,Value,Sum) -> Index + Sum end.
#Fun<erl_eval.18.105910772>
4> array:foldl(Fun,0,A1).
10
5> array:foldl(Fun,1,A1).
11
6> FunB = fun(Index,Value,Sum) -> Value + Sum end.
#Fun<erl_eval.18.105910772>
7> array:foldl(FunB,0,A1).
15