今天我要來學習一下Erlang中一個關鍵的數據類型----列表
列表是用[...]方括號來表示的,其元素類型和元組一樣可以是任意類型,長度也是任意的。
先來看幾個基本的簡單的列表:
[1,2,3]
[one,two,three]
[[1,2,3],[one,two,three]]
[ {person,“Michael”,24,"male"},{person,"Tina",23,"female"}]
[ ] //空的,什麼元素也沒有
所以列表就是零個或者多個Erlang項式的序列。
添加列表元素:
有件事用元組無法簡單高效地完成,用列表卻可以,那就是以現有的列表爲基礎創建一個新的,更長的列表。用管道符 | 便可完成。
[ 1 | [ ] ] --> [ 1 ]//它將右側的空表與左側的元素1合併,得到列表[ 1 ]
[ 2 | [ 1 ] ] --> [ 2 , 1 ]//它將左側的元素2取出合併到右側的列表中去
[ 1,2,3 | [4,5]] --> [1,2,3,4,5]//同上,先添加3,再添加2,最後添加1
現在來仔細體會一下,| 管道符的左側可以是任意數據,管道的右側必須是一個列表,同時,管道符和左右數據要在一個列表中(被[ ]方括號包圍)。
再多做幾個實驗:
[ 1 | 2 ] --> [1 | 2]
[ [1,2] | [3] ] --> [ [1,2],3]
[{one,two,three},[1,2] | [3]] --> [{one,two,three},[1,2],3]
[1 | ]. --> syntax error before: ']'
[ | ] --> syntax error before: '|'
[ | 2] --> syntax error before: '|'
[ | [2] ] --> syntax error before: '|'
[ [] | [2] ] --> [ [] ,2]
[ {} | [2] ] --> [ {} ,2]
嘗試了這麼多,幾乎能想到的組合都想到了,由此得出了管道符號的使用規律:
- 管道符號的右邊必須要有一個列表。不然你數據沒有地方合併啊。
- 管道符號的左邊必須要有佔內存的項式。{}空元組,[]空列表其實是佔內存的。
- 管道符號將左邊的數據按照項式爲單位一個個合併到右邊的列表中去。1,2就是兩個項式,[1,2]整體就是一個項式,等等。
在做一個實驗:
A = [1,2].
B = [5,4,3 | A]. 此時B 爲 [5,4,3,2,1]
再顯示A 爲[1,2]
即得到第四個規律:
4.管道符號右側的列表不會被修改
同時再實驗一下規律3:
A = [1,2].
B = [3,4].
C = [ A | B]. --> [[1,2],3,4] 驗證了規律3是正確的。此時的A就是一個項式了。
++運算符號
除了使用管道符號來實現添加列表元素功能外,還可以使用++運算符。
這樣使用:
[1,2,3] ++ [4,5] --> [1,2,3,4,5]
使用方法基本和管道符號相似。區別就是
管道符左側的數據被分離出去用[ ]方括號包圍住了:[1,2,{one} | [3]] ------->[1,2,{one}] ++ [3,4]
列出參考資料:
《Erlang/OTP併發編程實戰》第二章