erlang 學習筆記(一)
本學習筆記為初級教程,是對[url=的總結,也是我個人學習過程中的總結。請各位高手指點,並給出學習建議,謝謝。
[size=large]1. 順序程式設計設計(sequential programming)[/size]
[size=medium]1.1 erlang shell[/size]
啟動erlang,輸入命令[b]erl[/b]
[quote]$erl
erlang r14b01 (erts-5.8.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
eshell v5.8.2 (abort with ^g)
1>
[/quote]退出erlang shell有三種方法:
[*] 按照進入erlang shell時的提示輸入 control-g,看到如下輸出:
[quote]user switch command
-->
[/quote]
然後輸入q回車,退出
[*] 和平常終止程式的習慣一樣,使用control-c,看到如下輸出:
[quote]break: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (d)b-tables (d)istribution
[/quote]
然後輸入a回車就退出erlang shell.
[*]使用erlang自己的函式退出,輸入[b]halt().[/b]回車。
[quote]$ erl
erlang r14b01 (erts-5.8.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
eshell v5.8.2 (abort with ^g)
1> halt().
$[/quote]
注意函式結尾的"."號,這是必須的。在erlang中點號表示一條語句的結束。
[size=medium]1.2 模組和函式[/size]
erlang的**副檔名是.erl,檔名和改**檔案中的**模組名稱相同。比如名稱叫做tut的模組,其**檔名稱應該是:tut.erl。比如其**檔案的內容如下:
[quote]-module(tut).
-export([double/1]).
double(x) ->
2 * x.
[/quote]
第一行[b]-module(tut).[/b]定義了乙個模組名稱叫做tut,和該**檔名相同,第二行[b]-export([double/1]).[/b]說明該tut模組包含乙個叫做double的函式能被tut模組之外的**訪問,並且這個函式有乙個輸入引數。第三行和第四行是名為double的函式的具體定義,別忘記函式定義完畢之後的"."號。
[size=medium]1.3 編譯erlang[/size]
將1.2中寫完的**儲存到tut.erl,然後進入該檔案所在目錄下,輸入[b]erl[/b]命令,進入erlang shell,輸入[b]c(tut).[/b]編譯。
[quote]$ erl
erlang r14b01 (erts-5.8.2) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
eshell v5.8.2 (abort with ^g)
1> c(tut).
[/quote]
編譯之後輸出表明編譯成功。去該目錄下檢視檔案:
[quote]$ ls -l
total 32
-rw-r--r-- 1 guibin staff 460 2 25 10:44 tut.beam
-rw-r--r-- 1 guibin staff 60 2 24 10:43 tut.erl
[/quote]
發現生成了編譯後的可執行檔案but.beam。
[size=medium]1.4 呼叫函式[/size]
下面呼叫剛才定義好的函式double,計算30×2:
[quote]1> c(tut).
2> tut:double(30).
603>
[/quote]
[b]tut:double(30).[/b]表示呼叫tut模組下面的double函式,輸入引數為30,得到結果60。
Erlang學習筆記(一)
erlang雖然目前還不是主流語言,但有可能在未來一段時間發揮重要的作用.即使你不用erlang,也可以從erlang的設計和erlang的社群的智慧型中得到啟發,就算是從開啟思路,全面認識計算本質和平行計算特性的角度出發,erlang也值得了解.死鎖,競態,越來越多的鎖帶來了越來越複雜的問題.比如...
Erlang學習筆記(二)
今天在練習map對映組的時候 本人erlang版本17.01 根據 erlang程式設計 第二版這本書上操作,在取值的時候發現問題,如下 書中操作 如下圖 明顯兩個程式執行不一樣,後來看到官方文件,才發現是這個樣子 在上圖中明確指出,在map對映組中取值的時候用 取值,後來又看了看兩者區別發現兩者只...
Erlang學習筆記(二)
erlang的併發特性源自語言本身而並非作業系統。它把現實世界模擬成一系列的程序,其間僅靠交換訊息進行互動,因此erlang簡化了並行程式設計。在erlang世界中,存在並行程序但是沒有鎖,沒有同步方法,也不存在記憶體汙染的可能,因為erlang根本沒有共享記憶體.erlang程式可以由幾百萬個超級...