一:變數
1. erlang中的變數【單一賦值】,意味著變數只能賦值一次。
2.變數必須【大寫字母】開頭。
二:原子
原子相當於c++中的枚舉類型,但erlang中的原子的值是其本身。
原子是一串以【小寫字母】開頭的,但如果用單引號引起來,原子的命名就無所謂了,很多花樣就出來了。如果首字元是正軌的小寫字母,則原子的值是引號內的內容,否則輸出的值包含單引號。
三:元組(tuple)
有很多項組成一個單一的實體,類似於c++中的結構體之類的,在erlang中要用元組表示;
將若干個以【逗號】分隔的值用【花括弧】括起來就是一個元組。
{rex,1.71} 這個元組包含一個原子和一個浮點值。元組與c++中的結構比起來是匿名的,但erlang中不能以點號來操作,建立一個元組就是直接給一個變數綁定一個元組,因為元組中的元素沒有名字,所以只能我們記住這些元素的用處。通常情況下我們用一個原子作為元組的第一個元素來表明這個元組所代表的含義。
{point,10,45}來代替{10,45},這是一種編程風格。
元組可以嵌套。譬如:
Person={person,
{name,rex},
{height,1.72},
{footsize,43},
{eyecolor,brown}}.
表示一組人的資訊,注意是使用原子作為標籤。
元組聲明即自動建立,不再使用就隨之銷毀,有記憶體回收。
新元組引用了一個已綁定的變數,那就會享有這個變數引用的資料結構。應用沒定義的變數會出錯!
例子:
F = {firstname,rex}.
L = {lastname,yuan}.
P = {person,F,L}.
p的值就是{person,{firstname,rex},{lastname,yuan}}
=不是賦值,是模式比對,是erlang的基礎。
如果想從元組中提取內容:
聲明一個相同類型的元組,要取的值用變數來代替,變數哦!!!然後用=模式比對去取出來對應變數的值
例如:
Point = {point,10,43}.
{point,X,Y} = Point.
X和Y的值分別就為10,43.
位於等號兩邊的元組必須含有相同數量的元素,注意模式比對。如果有複雜的元組想提取內容,可以使用相同結構的模式來提取,需要提取的欄位位置必須要用未綁定的變數,切記!!不感興趣的可以用預留位置“_"來替代,其為匿名變數。在同一個模式中的不同地方,預留位置綁定的值不必相同。
四:列表
1:將若干個以【逗號】分隔的值用一個【方括弧】括起來就是一個列表了,注意和元組的區別。
元組是以花括弧,列表是以方括弧。
列表中的元素可以有各自不同的類型。例如:[1+2,hello,2-2,{cost,apple,30-20},3]
列表的首元素稱為列表的頭,剩餘的全部為列表的尾(tail),列表的頭可以是任何東西,但尾一般還是一個列表。訪問列表頭的操作非常高效。很多列表處理函數都是對頭開始進行處理。
[]是個空列表,[H|T]是以H為頭,以T為尾的列表。“|”可以將列表頭與尾分隔。最好保證T為正軌列表。添加列表內容一般用前插操作,可以一下插很多個元素。
2:提取列表元素
以模式比對為基礎來提取。
五:字串
erlang中沒有字串,字串其實是一個整數列表。
用雙引號括起來就是一個字串。
Name=“Rex”
必須使用雙引號。shell列印一串列表值的時候,只有列表中的所有整數都是可列印字元時,才把這個列表當作字串。有一個不是就不行。
可以用“$"符號來表示字元的整數值,其實就是ASCII碼,$s就是115,
注意字元集,確認顯示終端和地區設定問題,在這個問題上 erlang沒有任何辦法解決亂碼問題。