Сглаживание списка вложенных списков в Erlang

Я работаю над упражнениями в Программирование на Эрланге .

Вопрос is

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

Пример: сплющить ([[1, [2, [3], []]], [[[4]]], [5,6]]) ⇒ [1,2,3,4,5,6] .

Подсказка: используйте конкатенацию , чтобы решить сгладить .

А вот моя функция concatenate

%% concatenate([[1,2,3], [], [4, five]]) ⇒ [1,2,3,4,five].
concatenate([X|Xs]) -> concat(X, Xs, []).
concat([X|Xs], T, L) -> concat(Xs, T, [X|L]);
concat([], [X|Xs], L) -> concat(X, Xs, L);
concat([], [], L) -> reverse(L).

. Я действительно хочу знать элегантный способ реализации flatten . Я потратил часы на решение этого упражнения.

ОБНОВЛЕНИЕ : я забыл о самом важном предварительном условии. Возможно ли решить эту проблему с помощью только рекурсии и сопоставления с образцом ?

6
задан Greg Hewgill 15 September 2012 в 03:00
поделиться