【问题标题】:How do you use foldl in erlang on a list of integers to return the maximum integer?如何在整数列表中使用 erlang 中的 foldl 来返回最大整数?
【发布时间】:2017-02-25 22:07:18
【问题描述】:

我想使用下面的 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).

【问题讨论】:

    标签: erlang max anonymous-function fold


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-07
        • 2019-03-26
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 2022-12-15
        • 2022-11-04
        相关资源
        最近更新 更多