Erlang 列表

2022-07-07 15:34 更新

Erlang 列表

雖然元組可以將數(shù)據(jù)組成一組,但是我們也需要表示數(shù)據(jù)列表。 Erlang 中的列表由方括號(hào)括起來(lái)表示。例如,世界上不同城市的溫度列表就可以表示為:

[{moscow, {c, -10}}, {cape_town, {f, 70}}, {stockholm, {c, -4}},
 {paris, {f, 28}}, {london, {f, 36}}]

請(qǐng)注意,這個(gè)列表太長(zhǎng)而不能放在一行中,但是這并沒(méi)有什么關(guān)系。Erlang 允許在 “合理的地方” 換行,但是并不允許在一些 “不合理的方”,比如原子類(lèi)型、整數(shù)、或者其它數(shù)據(jù)類(lèi)型的中間。

可以使用 “|” 查看部分列表。將在下面的的例子來(lái)說(shuō)明這種用法:

17> [First |TheRest] = [1,2,3,4,5].
[1,2,3,4,5]
18> First.
1
19> TheRest.
[2,3,4,5]

可以用 | 將列表中的第一個(gè)元素與列表中其它元素分離開(kāi)。First 值為 1,TheRest 的值為 [2,3,4,5]。

下一個(gè)例子:

20> [E1, E2 | R] = [1,2,3,4,5,6,7].
[1,2,3,4,5,6,7]
21> E1.
1
22> E2.
2
23> R.
[3,4,5,6,7]

這個(gè)例子中,我們用 | 取得了列表中的前兩個(gè)元素。如果你要取得的元素的數(shù)量超過(guò)了列表中元素的總數(shù),將返回錯(cuò)誤。請(qǐng)注意列表中特殊情況,空列表(沒(méi)有元素),即 []:

24> [A, B | C] = [1, 2].
[1,2]
25> A.
1
26> B.
2
27> C.
[]

在前面的例子中,我們用的是新的變量名而沒(méi)有重復(fù)使用已有的變量名: First,TheRest,E1,R,A,B 或者 C。這是因?yàn)椋涸谕簧舷挛沫h(huán)境下一個(gè)變量只能被賦值一次。稍后會(huì)介紹會(huì)詳細(xì)介紹。

下面的例子中演示了如何獲得一個(gè)列表的長(zhǎng)度。將下面的代碼保存在文件 tut4.erl 中:

-module(tut4).

-export([list_length/1]).

list_length([]) ->
    0;    
list_length([First | Rest]) ->
    1 + list_length(Rest).

編譯并運(yùn)行:

28> c(tut4).
{ok,tut4}
29> tut4:list_length([1,2,3,4,5,6,7]).
7

代碼含義如下:

list_length([]) ->
    0;

空列表的長(zhǎng)度顯然為 0。

list_length([First | Rest]) ->
    1 + list_length(Rest).

一個(gè)列表中包含第一個(gè)元素 First 與剩余元素列表 Rest, 所以列表長(zhǎng)度為 Rest 列表的長(zhǎng)度加上 1。

(高級(jí)話題:這并不是尾遞歸,還有更好地實(shí)現(xiàn)該函數(shù)的方法。)

一般地,Erlang 中元組類(lèi)型承擔(dān)其它語(yǔ)言中記錄或者結(jié)構(gòu)體類(lèi)型的功能。列表是一個(gè)可變長(zhǎng)容器,與其它語(yǔ)言中的鏈表功能相同。

Erlang 中沒(méi)有字符串類(lèi)型。因?yàn)?,?Erlang 中字符串可以用 Unicode 字符的列表表示。這也隱含地說(shuō)明了列表 [97,98,99] 等價(jià)于字符串 “abc”。 Erlang 的 shell 是非常 “聰明" 的,它可以猜測(cè)出來(lái)列表所表示的內(nèi)容,以將其按最合適的方式輸出,例如:

30> [97,98,99]
"abc"
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)