lists:mapfoldl/3
列表里的每一个元素被函数调用
用法:
mapfoldl(Fun, Acc0, List1) -> {List2, Acc1}
内部实现:
-spec mapfoldl(Fun, Acc0, List1) -> {List2, Acc1} when Fun :: fun((A, AccIn) -> {B, AccOut}), Acc0 :: term(), Acc1 :: term(), AccIn :: term(), AccOut :: term(), List1 :: [A], List2 :: [B], A :: term(), B :: term(). mapfoldl(F, Accu0, [Hd|Tail]) -> {R,Accu1} = F(Hd, Accu0), {Rs,Accu2} = mapfoldl(F, Accu1, Tail), {[R|Rs],Accu2}; mapfoldl(F, Accu, []) when is_function(F, 2) -> {[],Accu}.
这个函数是 map 和 foldl 函数结合体,把列表 List1 里的每一个元素被函数 Fun 调用,执行后花括号的第一个值作为返回值返回,第 2 个值作为函数 Fun 的参数,用在下一次调用。
lists:mapfoldl(fun(X, Sum) -> {2 * X, X + Sum} end, 0, [1, 2, 3, 4, 5]).