比方說,我們有一個函數:在調用的嵌套函數序列的結果擺脫空列表的
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
?
是否有任何'最佳實踐'調用一系列深層嵌套函數,並在最終結果中輕鬆清除空列表[]
?
只是一個小提示:即使長度很快,對於非常大的列表來說,這個過濾器通常會變得很慢。最好這樣寫: do_generate([],Result) - > [M || [_ | _] = M < - 結果]; – aronisstav 2012-02-16 20:53:17
'[M || M < - Result,(begin(if M == [] - > false; true - > true end)end)];'這樣可以避免'length'函數 – 2012-02-17 05:06:08