Функция Erlang, которая возвращает два значения - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть функция Erlang, которая возвращает последний элемент списка

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

, и функция, которая возвращает список без последнего элемента

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

, поэтому я просматриваю тот же список для два раза, и для большей эффективности я хочу сделать только функцию, которая возвращает последний элемент списка и возвращает этот список без этого элемента в одном просмотре, это легко на другом языке, но я не могу сделать это в Erlang, так что любой помогите и спасибо всем.

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Вы можете просто перевернуть список:

List = [1, 2, 3, 4, 5, 6],
[Last | Rest] = lists:reverse(List)
1 голос
/ 27 апреля 2020

В Erlang вы можете вернуть кортеж, поэтому вы просто определяете кортеж с последним элементом и списком:

... -> {last_element, list}

Вы получаете значение с сопоставлением с шаблоном:

{Element, List} = last_element_and_new_list(The_List)

Последний элемент и список будут связаны с соответствующими переменными. Обратите внимание, что вы можете вернуть более двух значений в кортеже.

1 голос
/ 27 апреля 2020

Обычно вы возвращаете два значения в кортеже:

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]).

Вызов list_and_last с [1,2,3] возвращает {3,[2,1]}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...