今天我要來學習一下erlang中乙個關鍵的資料型別----列表
列表是用[...]方括號來表示的,其元素型別和元組一樣可以是任意型別,長度也是任意的。
先來看幾個基本的簡單的列表:
[1,2,3]
[one,two,three]
[[1,2,3],[one,two,three]]
[ ,]
[ ] //空的,什麼元素也沒有
所以列表就是零個或者多個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]
[,[1,2] | [3]] --> [,[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, | [3]] ------->[1,2,] ++ [3,4]
Erlang實戰練習(四)
通過前幾次的練習實踐相信大家對erlang程式設計有了基本的認識和了解,本文通過二分搜尋 echo server 程序環三個實戰練習認識erlang中程序的通訊的基礎,通過本次實戰,主要是感受erlang建立程序 傳送訊息 接受訊息的過程,我們知道,erlang並不是共享記憶體的通訊,erlang中...
我也學erlang(四)
定義自己的控制流程 for erlang沒有for迴圈,我們先定義乙個 module loop for export for 3 for max,max,f f max for i,max,f f i for i 1,max,f 就這麼簡單,例如,對for 1,10,f 求值會生成列表 f 1 f ...
erlang第四天總結
1.使用gen tcp send 2向該函式返回套接字socket傳送資料報,往埠的資料報傳送下面的格式 2.如果建立socket套接字時候選項列表中指定 這樣只能使用gen tcp recv 2或 gen tcp recv 3來接收 3.one for one vs one for one 相同點...