Erlang函数表示returns两个值

Erlang function that returns two values

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

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

和一个函数 returns 没有最后一个元素的列表

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

所以我浏览同一个列表两次,为了提高效率我只想做一个函数 returns 列表的最后一个元素和 returns 这个列表没有这个元素一次浏览,这在另一种语言中很容易,但我不能在 Erlang 中做到这一点,所以请提供帮助,谢谢大家。

您通常 return 元组中的两个值:

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] return 调用 list_and_last {3,[2,1]}

您可以简单地反转列表:

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

在 Erlang 中你可以 return 一个元组,所以你只需定义一个包含最后一个元素和列表的元组:

... -> {last_element, list}

您使用模式匹配检索值:

{Element, List} = last_element_and_new_list(The_List)

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