Допустим, у нас есть функция:
generate([],Result) ->
Result;
generate([H|T],Result) ->
case H > 0 of
true -> generate(T,[H*2|Result]);
false -> generate(T,Result)
end.
Итак, в основном функция что-то делает с каждым H
и добавляет это что-то к Result
.
Теперь, если я вызову generate()
из другой функции:
do_generate([],Result) ->
Result;
do_generate([List|Other_lists],Result) ->
do_generate(Other_lists,[generate(List,[])|Result]).
Проблема в том, что я не хочу, чтобы функция do_generate()
добавляла пустой список []
к своему результату. Что если я позвоню do_generate([[0,0],[1,2]],[])
? Я могу закончить что-то вроде этого: [[2,4],[]]
.
Если я встраиваю do_generate()
в другие функции, я могу получить еще больше пустых списков в списке результатов, что очень неудобно для последующего использования.
Как можно избежать добавления []
к Result
иначе, чем проверять каждый раз case generate(List,[]) == [] of
?
Есть ли "лучший метод" для вызова последовательности глубоко вложенных функций и избавления от пустых списков []
в конечном результате с легкостью?