正如《代碼的未來(lái)》中所說(shuō),為了充分利用多核,并發(fā)變成將成為未來(lái)發(fā)展的趨勢(shì),對(duì)于并發(fā)編程的支持,Erlang確實(shí)是不二之選,Erlang在國(guó)內(nèi)仍然較為小眾,經(jīng)典書(shū)籍相對(duì)也要少很多,最終選擇了《Erlang程序設(shè)計(jì) 第2版》作為了我的第一本Erlang入門(mén)書(shū)籍。
Erlang官方網(wǎng)站:http://www.erlang.org/
Erlang安裝:
對(duì)于Ubuntu和Debian發(fā)行版可采用:apt-get install erlang 來(lái)安裝;
對(duì)于其他 UNIX 和 Linux 平臺(tái),可以下載源代碼并手工構(gòu)建它,具體如下所示:
Download:http://www.erlang.org/download.html
復(fù)制代碼 代碼如下:
1. 解壓源代碼:$ tar zxf otp_src_17.3.tar.gz
2. $ cd opt_src_17.3
3. $ ./configure
4. $ make
5. $ make install
Erlang是函數(shù)式編程語(yǔ)言,被設(shè)計(jì)主要用來(lái)解決自下而上的編寫(xiě)并發(fā)式、分布式、容錯(cuò)、可擴(kuò)展和軟實(shí)時(shí)系統(tǒng)等問(wèn)題。
由于之前沒(méi)有接觸過(guò)函數(shù)式編程,還是從簡(jiǎn)單的順序編程一步步來(lái)吧。
Erlang進(jìn)入shell編程環(huán)境很簡(jiǎn)單,與Python類(lèi)似,在終端直接輸入erl即可,退出可使用 Ctrl+c 再輸入 a 的方法,但這樣可能導(dǎo)致某些數(shù)據(jù)的破壞,最好使用 q().
注釋?zhuān)?
變量:所有變量名都必須以大寫(xiě)字母開(kāi)頭,變量一經(jīng)賦值,不許改變,
模式匹配操作:
Lhs = Rhs 意思是計(jì)算右側(cè)的值,然后將結(jié)果與左側(cè)的模式相匹配;
X = Expression,如果X之前沒(méi)有被賦值,一定會(huì)匹配成功,X = AnotherExpression,則只有在Expression = AnotherExpression時(shí)才匹配成功,否則匹配失??;
浮點(diǎn)數(shù):
使用“/”給兩個(gè)整數(shù)做除法時(shí),結(jié)果會(huì)自動(dòng)轉(zhuǎn)換為浮點(diǎn)數(shù);
要從除法里獲得整數(shù),必須使用div和rem;例如:5 div 3. 結(jié)果為1,5 rem 3. 結(jié)果為2;
原子:
原子被用于表示常量值,具有全局性,原子以小寫(xiě)字母開(kāi)頭,后接一串字母,數(shù)字,下劃線或@符號(hào);
原子可以放在單引號(hào)中,可以創(chuàng)建以大寫(xiě)字母開(kāi)頭或包含字母數(shù)字以外字符的原子,如:‘Monday',‘+',‘a(chǎn) test paper'等,原子的值就是它本身;
元組:
為了方便理解,元組最好加上標(biāo)簽,例如:{point, 10, 45}.
創(chuàng)建元組:F = {firstName, joe}. L = {lastName, Tom}. P = {person, F, L}.
提取firstName:{_, {_, Who}, {_, _}} = P.
列表:
列表中的各元素可以是任何類(lèi)型,[H|T]中H為列表頭,T為列表尾,例如:
L = [{name, tom}, 1, 2.0, test, {point, 10, 23}].
[H|T] = L.
則,H = {name, tom}, T = [1, 2.0, test, {point, 10, 23}].
字符串:
字符串字面量就是用雙引號(hào)圍起來(lái)的一串字符,例如:
N = "Hello". "Hello"其實(shí)只是一個(gè)列表的簡(jiǎn)寫(xiě),這個(gè)列表包含了代表字符串里各個(gè)字符的整數(shù)字符代碼。
X = [97, 98, 99] .
打印出"abc".
io:format("~w~n", ["abc"]).
打印出[97, 98, 99]
[H|T] = "cat". H = 99, T = "at".
f()讓shell忘記現(xiàn)有的任何綁定。