Я только начал изучать эрланг, и рекурсия хвоста убивает меня медленно; Я не могу обдумать это. Я пытаюсь сделать программу, которая удваивает все остальные числа в списке, и я пытаюсь сделать это с помощью рекурсии хвоста.Рекурсия хвоста Эрланг
Вот мой код до сих пор
stripAndDoubleOdds([H|T]) -> stripAndDoubleOdds([H|T],1,[H|T]).
stripAndDoubleOdds(F, _, []) -> F;
stripAndDoubleOdds(_,Index,[H1|T1]) ->
F = [] ++ 2*lists:nth(Index, [H1|T1]),
stripAndDoubleOdds(F, Index +2, T1).
Когда я дать ему список номеров я не получаю никакого вывода вообще, но если я дам ей один номер может удвоить его без проблем.
Индекс предназначен для сохранения положения текущего элемента и его увеличения на 2, чтобы получить каждое другое целое число и удвоить его. Мое текущее решение включает в себя извлечение головы, удвоение ее, добавление ее в список, а затем передачу хвоста через процесс снова и снова, пока я не получу пустой список, и на этом этапе я должен получить свой список, F обратно. например если я вхожу [1,2,3,4,5], я просто хочу, чтобы он дал мне список с [2,6,, 10].
Спасибо, что делает мою жизнь лучше; Я отследил его, используя бумагу, так что теперь яснее. –
Функция не работает с списком ввода, который имеет нечетную длину, последний член отсутствует. – Pascal
Хорошо, я исправлю это. –