最近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...