- %% Author: ztl
- %% Created: Nov 26, 2008
- %% Description: TODO: Add description to mylib
- -module(mylib).
- %%
- %% Include files
- %%
- %%
- %% Exported Functions
- %%
- -export([qsort/1]).
- %%
- %% API Functions
- %%
- qsort([]) -> [];
- qsort([Pivot|T]) ->
- qsort([X || X <- T, X < Pivot])
- ++ [Pivot] ++
- qsort([X || X <- T, X >= Pivot]).
- %%
- %% Local Functions
- %%
(test@ibm-f618075b95a)1> L=[23,6,2,9,27,400,78,45,61,82,14].
[23,6,2,9,27,400,78,45,61,82,14]
(test@ibm-f618075b95a)2> mylib:qsort(L).
[2,6,9,14,23,27,45,61,78,82,400]
稍微解釋一下這段代碼,關鍵部分是這一段
- qsort([]) -> [];
- qsort([Pivot|T]) ->
- qsort([X || X <- T, X < Pivot])
- ++ [Pivot] ++
- qsort([X || X <- T, X >= Pivot]).
- qsort([Pivot|T]) ->
- qsort([X || X <- T, X < Pivot])
- ++ [Pivot] ++
- qsort([X || X <- T, X >= Pivot]).
L=[23,6,2,9,27,400,78,45,61,82,14].
[]表示空的列表。
代碼裏有這樣一段:
qsort([Pivot|T])
這個表示,qsort接受一個列表作爲參數(不能爲空),且將列表的第一個元素賦值給變量Pivot,剩下的元素輔助給變量T。
順便提一句,erlang中的變量在賦值後,是不能改變的。
在來解釋一下代碼中的這句
- qsort([X || X <- T, X < Pivot]
[X || X <- T, X < Pivot]這樣形式的代碼,表示取出在T中,符合小於Pivot條件的元素組成列表X,
在分析一下整個代碼,發現erlang寫出的quicksort原來如此輕巧。令人讚歎。(當然,erlang的正真優勢在於並行處理能力)