【问题标题】:Erlang function that returns two values返回两个值的 Erlang 函数
【发布时间】:2020-08-11 09:17:33
【问题描述】:

我有一个返回列表最后一个元素的 Erlang 函数

lastElement([H|[]]) ->H;
lastElement([H|T]) ->lastElement(T).

以及一个返回没有最后一个元素的列表的函数

withoutLastElement([H|[]], Result) ->Result;
withoutLastElement([H|T]) ->withoutLastElement(T, [H|Result]).

所以我浏览同一个列表两次,为了提高效率,我只想执行一个函数,该函数返回列表的最后一个元素,并在一次浏览中返回没有此元素的列表,这在另一种语言中很容易,但是我不能在 Erlang 中做到这一点,所以任何帮助,谢谢大家。

【问题讨论】:

  • 使用累加器。对优化非常有用。

标签: list function erlang


【解决方案1】:

您通常会在一个元组中返回这两个值:

list_and_last(List) ->
    list_and_last(List, []).

list_and_last([H], Result) ->
    {H, Result};
list_and_last([H|T], Result) ->
    list_and_last(T, [H|Result]).

[1,2,3] 调用list_and_last 返回{3,[2,1]}

【讨论】:

    【解决方案2】:

    您可以简单地反转列表:

    List = [1, 2, 3, 4, 5, 6],
    [Last | Rest] = lists:reverse(List)
    

    【讨论】:

      【解决方案3】:

      在 Erlang 中,您可以返回一个元组,因此您只需定义一个包含最后一个元素和列表的元组:

      ... -> {last_element, list}
      

      您使用模式匹配检索值:

      {Element, List} = last_element_and_new_list(The_List)
      

      最后一个元素和列表将绑定到各自的变量。请注意,您可以在一个元组中返回两个以上的值。

      【讨论】:

        猜你喜欢
        • 2018-12-06
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 2011-04-18
        • 2011-03-09
        相关资源
        最近更新 更多