2017-02-25 59 views
0

我想使用下面的Erlang代码来获取整数列表中的最高整数,但由于某种原因总是最终得到列表中的最后一个整数。任何帮助?如何在整数列表中使用erlang中的foldl来返回最大整数?

解决方案的例子 - >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). 

回答

1

你的功能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 
+0

谢谢你解决了它:) –

+0

在这种情况下,你应该将答案标记为接受。 –

1

你在函数返回F会是怎样的Acc新的价值,并最终值lists:foldl/3将返回。

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

让我知道你是否需要马上得到实际的代码,但我会建议你自己解决它。这样对你更有趣。

相关问题