Erlang中文手册(Erldoc.com)  »  lists  »  mapfoldr/3
Erlang并发编程 Erlang/OTP设计原理 Erlang/OTP[pdf] Mnesia用户手册[pdf] Erlang完整手册[en] 官网手册[en] 模块列表 方法列表 随机 Erlang中文社区(BBS) 美女图库

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]).
阿里云 - 最高1000元通用代金券立即可用
沪ICP备13037221号-9