在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 區(qū)塊鏈/ 原子類型
注冊進程名稱
錯誤處理
完整示例
分布式編程
消息傳遞
if 與 case
健壯性
映射 (Map)
高階函數(shù) (Fun)
輸出至終端
更多關(guān)于列表的內(nèi)容
內(nèi)置函數(shù) (BIF)
模塊與函數(shù)
將大程序分在多個文件中
匹配、Guards 與變量的作用域
超時
列表
完整示例
頭文件
標(biāo)準(zhǔn)模塊與使用手冊
進程
記錄
增加健壯性后的完整示例
Erlang Shell
原子類型

原子類型

原子類型是 Erlang 語言中另一種數(shù)據(jù)類型。所有原子類型都以小寫字母開頭 (參見 原子類型)。例如,charles,centimeter,inch 等。原子類型就是名字而已,沒有其它含義。它們與變量不同,變量擁有值,而原子類型沒有。

將下面的這段程序輸入到文件 tut2.erl 中。這段程序完成英寸與厘米之間的相互轉(zhuǎn)換:

-module(tut2).
-export([convert/2]).

convert(M, inch) ->
    M / 2.54;

convert(N, centimeter) ->
    N * 2.54.

編譯:

9> c(tut2).
{ok,tut2}

測試:

10> tut2:convert(3, inch).
1.1811023622047243
11> tut2:convert(7, centimeter).
17.78

注意,到目前為止我們都沒有介紹小數(shù)(符點數(shù))的相關(guān)內(nèi)容。希望你暫時先了解一下。

讓我們看一下,如果輸入的參數(shù)既不是 centimeter 也不是 inch 時會發(fā)生什么情況:

12> tut2:convert(3, miles).
** exception error: no function clause matching tut2:convert(3,miles) (tut2.erl, line 4)

convert 函數(shù)的兩部分被稱之為函數(shù)的兩個子句。正如你所看到的那樣,miles 并不是子句的一部分。Erlang 系統(tǒng)找不到匹配的子句,所以返回了錯誤消息 function_clause。shell 負責(zé)被錯誤信息友好地輸出,同時錯誤元組會被存儲到 shell 的歷史列表中,可以使用 v/1 命令將該列表輸出:

13> v(12).
{'EXIT',{function_clause,[{tut2,convert,
                                [3,miles],
                                [{file,"tut2.erl"},{line,4}]},
                          {erl_eval,do_apply,5,[{file,"erl_eval.erl"},{line,482}]},
                          {shell,exprs,7,[{file,"shell.erl"},{line,666}]},
                          {shell,eval_exprs,7,[{file,"shell.erl"},{line,621}]},
                          {shell,eval_loop,3,[{file,"shell.erl"},{line,606}]}]}}

元組

前面的 tut2 的程序的風(fēng)格不是一好的編程風(fēng)格。例如:

tut2.convert(3,inch)  

這是意味著 3 本身已經(jīng)是英寸表示了呢?還是指將 3 厘米轉(zhuǎn)換成英寸呢? Erlang 提供了將某些元素分成組并用以更易于理解的方式表示的機制。它就是元組。一個元組由花括號括起來的。

所以,{inch,3} 指的就是 3 英寸,而 {centimeter, 5} 指的就是 5 厘米。接下來,我們將重寫厘米與英寸之間的轉(zhuǎn)換程序。將下面的代碼輸入到文件 tut3.erl 文件中:

-module(tut3).
-export([convert_length/1]).

convert_length({centimeter, X}) ->
    {inch, X / 2.54};
convert_length({inch, Y}) ->
    {centimeter, Y * 2.54}.

編譯并測試:

14> c(tut3).
{ok,tut3}
15> tut3:convert_length({inch, 5}).
{centimeter,12.7}
16> tut3:convert_length(tut3:convert_length({inch, 5})).
{inch,5.0}

請注意,第 16 行代碼將 5 英寸轉(zhuǎn)換成厘米后,再轉(zhuǎn)換為就英寸,所以它得到原來的值。這也表明,一個函數(shù)實參可以是另一個函數(shù)的返回結(jié)果。仔細看一下,第 16 行的代碼是怎么工作的。將參數(shù) {inch,5} 傳遞給函數(shù)后,convert_length 函數(shù)的首語句的頭首先被匹配,也就是 convert_length({inch,5}) 被匹配。也可以看作,{centimeter, X} 沒有與 {inch,5} 匹配成功 ("->" 前面的內(nèi)容即被稱之為頭部)。第一個匹配失敗后,程序會嘗試第二個語句,即 convert_length({inch,5})。 第二個語句匹配成功,所以 Y 值也就為 5。

元組中可以有更多的元素,而不僅僅像上面描述的那樣只有兩部分。事實上,你可以在元組中,使用任意多的部分,只要每個部分都是合法的 Erlang 的項。例如,表示世界上不同城市的溫度值:

{moscow, {c, -10}}
{cape_town, {f, 70}}
{paris, {f, 28}}

這些元組中每個都有固定數(shù)目的項。元組中的每個項都被稱之為一個元素。在元組 {moscow,{c,-10}} 中,第一個元素為 moscow 而第二個元素為 {c,-10}。其中,c 表示攝氏度,f 表示華氏度。