返回两个值的Erlang函数



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

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

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

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

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

您通常会返回元组中的两个值:

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]}

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

... -> {last_element, list}

您使用模式匹配检索值:

{Element, List} = last_element_and_new_list(The_List)

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

您可以简单地反转列表:

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

最新更新