4
我最初試着寫這個而不是尾遞歸,因爲根據http://www.erlang.org/doc/efficiency_guide/myths.html BEAM自己做。它的工作原理,我只是想知道我的代碼是否過於醜陋/效率低下。有識字的程序http://en.literateprograms.org/Selection_sort_%28Erlang%29似乎比我的版本簡潔一點,但我覺得我的太多params很容易理解。如果我對遞歸更有經驗,我不確定自己是否會有這種感覺。是否可以在沒有累加器的情況下寫入?
-module(selection).
-export([selection/1]).
selection([H|T]) -> lists:reverse(selection(T,H,[],[])).
selection([],Min,[H|T],Acc) -> selection(T,H,[],[Min|Acc]);
selection([],Min,[],Acc) -> [Min|Acc];
selection([H|T],Min,Rest,Acc) when H < Min -> selection(T,H,[Min|Rest],Acc);
selection([H|T],Min,Rest,Acc) -> selection(T,Min,[H|Rest],Acc).
如果您選擇max而不是min,那麼您應該可以在不進行反向調用的情況下執行上述操作。 –