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