我有一个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)