1、變數
1)erlang變數變數必須以大寫字母或者下劃線開頭,可以包含字母、下劃線和@;
2)變數只容許賦值一次
2、數字型別
1)b#val表示以b進製儲存的數字val,比如
7> 2#101.
5二進位制儲存的101就是10進製的5了
8> 8#101.
65八進位制儲存的101就是10進製的65了
2)$char表示字元char的ascii編碼,比如$a表示65
3、atom
可以理解成常量,它可以包含任何字元,以小寫字母開頭,如果不是以小寫字母開頭或者是字母之外的符號,需要用單引號包括起來,比如abc,'ab'
4、tuple,元組,可以理解成定長陣列,是erlang的基礎資料結構之一:
8> .
9> .
10> size().
65、list
另外乙個基礎資料結構就是各個語言都有的list(列表),在內以,隔開,可以動態改變大小,
[123, xyz]
[123, def, abc][,,
]可以使用內建函式length求列表大小。
6、erlang中函式的定義必須在乙個模組內(module),並且模組和函式的名稱都必須是atom,函式的引數可以是任何的erlang型別或者資料結構,函式要被呼叫需要從模組中匯出,函式呼叫的形式類似:modulename:funcname(arg1,arg2,...).
7、內建的常用函式:
date()
time()
length([1,2,3,4,5])
size()
atom_to_list(an_atom)
list_to_tuple([1,2,3,4])
integer_to_list(2234)
tuple_to_list({})
hd([1,2,3,4]) %輸出1,也就是列表的head,類似lisp的car
tl([1,2,3,4]) %輸出[2,3,4],也就是列表的tail,類似list的cdr
8、常見shell命令:
1)h(). 用來列印最近的20條歷史命令
2)b(). 檢視所有繫結的變數
3) f(). 取消(遺忘)所有繫結的變數。
4) f(val). 取消指定的繫結變數
5) e(n). 執行第n條歷史命令
6) e(-1). 執行上一條shell命令
10、guard,用於限制變數的型別和範圍,比如:
number(x) - x 是數字
integer(x) - x 是整數
float(x) - x 是浮點數
atom(x) - x 是乙個atom
tuple(x) - x 是乙個元組
list(x) - x 是乙個列表
length(x) == 3 - x 是乙個長度為3的列表
size(x) == 2 - x 是乙個長度為2的元組
x > y + z - x >y+z
x == y - x 與y相等
x =:= y - x 全等於y
(比如: 1 == 1.0 成功
1 =:= 1.0 失敗)
為了方便比較,erlang規定如下的比較順序:
number < atom < reference < port < pid < tuple < list
其中pid就是process的id。
11、if和case語句
if語句的結構如下:
ifguard1 ->
sequence1 ;
guard2 ->
sequence2 ;
...end
而case語句的結構如下:
case expr of
pattern1 [when guard1] -> seq1;
pattern2 [when guard2] -> seq2;
patternn [when guardn] -> seqn
endif和case語句都有乙個問題,就是當沒有模式匹配或者grard都是false的時候會導致error,
通過_指代任意的expr,返回true,而if可以這樣:
iftrue ->
true
end一樣的道理。case語句另乙個需要注意的問題就是變數範圍,每個case分支中定義的變數都將預設匯出case語句,也就是在case語句結束後可以被引用,因此乙個規則就是每個case分支定義的變數應該一致,不然算是非法的,編譯器會給出警告,比如:
f(x) ->
case g(x) of
true -> a = h(x), b = a + 7;
false -> b = 6
end,
h(a).
如果執行true分支,變數a和變數b都被定義,而如果執行的false分支,只有變數b被定義,可在case語句執行後,h(a)呼叫了變數a,這是不安全的,因為變數a完全可能沒有被定義,編譯器將給出警告
variable 'a' unsafe in 'case' (line 10)
erlang 符號相關基本語法
erlang語法約定 比較符opdescription equal to not equal to less than or equal to less than greater than or equal to greater than exactly equal to exactly not e...
Erlang 位元語法(Bit Syntax)
erlang的位元語法 erlang bit syntax 提供了一種方法來匹配二進位制資料,這使得erlang二進位制物件在某種程度上等同於其他erlang物件,如元組和列表。也因為其快速高效,使得在erlang中,二進位制物件被廣泛使用,尤其是在協議程式設計方面。官方文件 erlang的位元語法...
erlang的map基本使用
maps 適用於需要在執行時改變資料結構 record則不行 的場景,可以動態增加key 資料量不宜過大,具體多大沒有實際資料,maps from list 如果list表很長,則相應的耗時時間會很長,此時最好用lists模組。由於map是動態結構,速度上必然無法匹敵record。記憶體大小介於tu...