【发布时间】:2012-02-16 19:50:33
【问题描述】:
假设我们有一个函数:
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() 嵌入到其他函数中,我最终可能会在结果列表中得到更多的空列表,这对于以后的使用非常不方便。
除了每次都检查case generate(List,[]) == [] of之外,如何避免将[]添加到Result?
是否有任何“最佳实践”可以调用一系列深度嵌套的函数并在最终结果中轻松摆脱空列表[]?
【问题讨论】:
标签: functional-programming erlang nested nested-lists