给定一个函数:
min(A, B) when A =< B -> A;
min(_A, B) -> B.
我可以在函数
foldl
中使用它吗?以类似的方式:lists:foldl(fun min/2, 0, [1,2,3,4,5,6,7,8,9,10])
我相信这是不可能的,因为我必须设置一个初始值,该值将与列表的其余部分进行比较,例如。 G。没有我能想到的身份函数。我对吗?
语法是用 Erlang 编写的,但对于非 Erlang 程序员来说也应该是可读的。
最佳答案
min(List) ->
Min = fun(A, B) when A < B -> A;
(_A, B) -> B end,
lists:foldl(Min, undefined, List).
使用
undefined
因为初始状态应该可以解决问题。返回 undefined
对于空列表,作为 API 有点不错。如果您希望它在空列表上崩溃,请改用此函数头:
min([Head|Rest]) ->
Min = fun(A, B) when A < B -> A;
(_A, B) -> B end,
lists:foldl(Min, Head, Rest).
关于list - Erlang:是否可以将最小函数编写为列表折叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5168190/