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

时间:2017-02-25 13:58:57

标签: 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).

2 个答案:

答案 0 :(得分:4)

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

...
F = fun(L, Acc) -> max(L, Acc) end.
...

测试:

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

答案 1 :(得分:1)

您在函数F中返回的内容将是Acc的新值,最终将返回值lists:foldl/3

您可能要做的是在F内进行比较,并检查Acc是否大于当前值。您无需递归max/1,因为您无论如何都要在lists:foldl/3中迭代列表。

如果您需要立即获取实际代码,请告诉我,但我建议您自己搞清楚。这样对你来说更有趣。