使用erlang實現的quicksort

2021-04-22 09:54:00 字數 1760 閱讀 4300

最近erlang開始變得流行起來,一下是乙個erlang中的quicksort的**。

%% 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() -> ;"最後有乙個分號。在erlang中,對於不同模式的輸入引數,函式可以選擇相應的方式處理,在這段**中,如果輸入的是乙個空的列表,則直接返回空列表(就是**第一句話的作用處理),如果不是,則執行

qsort([pivot|t]) ->

qsort([x || x <- t, x < pivot])

++ [pivot] ++

qsort([x || x <- t, x >= pivot]).

在來解釋一下[...],[...]表示列表,比如:

rel="file-list" href="file:///c:%5cdocume%7e1%5cztl%5clocals%7e1%5ctemp%5cmsohtml1%5c01%5cclip_filelist.xml">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]

這裡就是遞迴呼叫,在qsort函式中再次呼叫qsort函式

[x || x <- t, x < pivot]這樣形式的**,表示取出在t中,符合小於pivot條件的元素組成列表x,

在分析一下整個**,發現erlang寫出的quicksort原來如此輕巧。令人讚嘆。(當然,erlang的正真優勢在於並行處理能力)

HTTP3 0 QUIC的實現機制

http1.1在應用層以純文字的形式進行通訊,每次通訊都要帶完整的http的頭,而且不考慮pipeli模式的化,每次的過程總是像上面描述的那樣一去一回。那樣在實時性 併發想上都存在問題 頭部壓縮 http2.0會對http的頭進行一定的壓縮,將原來每次都要攜帶的大量key value在兩端建立乙個索...

Erlang中atom的實現

erlang的原子 atom 在匹配中有著重要作用,它兼顧了可讀性和執行效率。通過atom,可以實現很多靈活高效的應用。atom可以看作是給字串生成了乙個id,內部使用的是id值,必要時可以取出它的內容 字串 例如用於列印輸出。atom 的 eterm 除去 6 位的標籤之外剩下的部分,就是 ato...

初次使用erlang的concurrent

如果不是它駭人聽聞的並行效能,幾乎不會考慮去學習這麼一門語言。因為它的並行,我看到的是一塊用軟體寫出來的電路板,是的,它幾乎就是把電腦變成了乙個可以自由編寫邏輯的晶元。例程來自這裡 例1 體會concurrent module tut14 export start 0,say something 2...