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

lists:foldr/3

列表里的元素递归调用函数

用法:

foldr(Fun, Acc0, List) -> Acc1

内部实现:

-spec foldr(Fun, Acc0, List) -> Acc1 when
      Fun :: fun((Elem :: T, AccIn) -> AccOut),
      Acc0 :: term(),
      Acc1 :: term(),
      AccIn :: term(),
      AccOut :: term(),
      List :: [T],
      T :: term().

foldr(F, Accu, [Hd|Tail]) ->
    F(Hd, foldr(F, Accu, Tail));
foldr(F, Accu, []) when is_function(F, 2) -> Accu.

lists:foldl/3 一样,都是列表 List 里的每一个元素和一个累积器(accumulator)参数 Acc0 作为 Fun 的参数被调用执行,并返回一个新的累积器 Acc1 跟列表的下一个元素调用,直到调用完列表里的所有元素,最终返回累积器 Acc 的结果值。只是获取元素的顺序不一样,lists:foldl/3 是从左向右,而 lists:foldr/3 是从右向左。lists:foldl/3 采用的是尾递归的递归方式,比 lists:foldr/3 会更高效些。

lists:foldr(fun(E, AccList) -> [E | AccList] end, [], [a, b, c, d, e]).
lists:foldl(fun(E, AccList) -> [E | AccList] end, [], [a, b, c, d, e]).
阿里云 - 最高1000元通用代金券立即可用
沪ICP备13037221号-9