如何在整数列表中使用erlang中的foldl返回最大整数?

A.S*_*.Sh 1 erlang max anonymous-function fold

我想使用下面的Erlang代码来获取整数列表中的最高整数,但由于某种原因,总会最终获得列表中的最后一个整数。有什么帮助吗?

解决方案示例-> test:max([2,8,5,6]).应该返回8,但使用此代码将返回6。

-spec max(L) -> M when
  L::[integer()],
  M::integer().

max([H | T]) ->
F = fun(L, Acc) -> max([L]) end,
lists:foldl(F, H, T).
Run Code Online (Sandbox Code Playgroud)

Dog*_*ert 5

你的函数F应该返回的最大LAcc。您可以max/2为此使用内置函数:

...
F = fun(L, Acc) -> max(L, Acc) end.
...
Run Code Online (Sandbox Code Playgroud)

测试:

1> F = fun(L, Acc) -> max(L, Acc) end.
#Fun<erl_eval.12.52032458>
2> [H | T] = [2, 8, 5, 6].
[2,8,5,6]
3> lists:foldl(F, H, T).
8
Run Code Online (Sandbox Code Playgroud)