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

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

模塊與函數(shù)

如果一種編程語言只能通過 shell 來運行代碼,那么這種語言基本上沒什么太大的用處,Erlang 同樣可以通過腳本來運行程序。這里有一小段 Erlang 程序。使用合適的文本編輯器將其輸入到文件 tut.erl 中。文件名稱必須為 tut.erl 不能任意修改,并且需要將其放置于你啟動 erl 命令時所在的目錄下。如果恰巧你的編輯器有 Erlang 模式的話,那么編輯器會幫助你優(yōu)雅地組織和格式化你的代碼 (參考 Emacs 的 Erlang 模式),不過即使你沒有這樣的編輯器你也可以很好地管理你自己的代碼。下面是待輸入的代碼:

-module(tut).
-export([double/1]).

double(X) ->
    2 * X.

很容易就可以看出來這個程序?qū)?shù)值翻倍。開始兩行的代碼稍后會解釋。讓我們來編譯一下這段代碼。我們可以在 Erlang shell 下來完成這個任務(wù),其中 c 代表編譯(compile)的意思:

3> c(tut).
{ok,tut}

{ok,tut} 說明編譯成功。如果返回 “error” 則表示輸入的代碼中存在錯誤。其它相關(guān)的錯誤信息可以幫助你弄清楚錯誤的位置和原因,然后你可以根據(jù)錯誤提示修改并重新編譯代碼。

下面運行這個程序:

4> tut:double(10).
20

和預(yù)期結(jié)果一樣,10 乘以 2 后就是 20。

讓我們先回到代碼最開始的這兩行。每個的 Erlang 程序的文件都包含一個 Erlang 模塊。模塊中代碼的第一個行就是該模塊的名字(參見 模塊)。

-module(tut).

因此,這個模塊名為 tut。請注意該行代碼結(jié)束后的句號 “.”。存儲模塊的文件必須與模塊同名,并且以 “.erl” 作為擴展。在這個例子中,文件名為 tut.erl。如果使用到另外一個模塊中的一個函數(shù),可以使用如下的語法 :module_name:function_name(arguments)。因此,下面的代碼的含義也就是調(diào)用模塊 tut 中的函數(shù) double,并且傳遞的實參為 10。

4> tut:double(10).

第二行聲明 tut 模塊中包含一個 double 函數(shù),此函數(shù)接受一個參數(shù) (在本例中為 x):

-export([double/1]).

同時,第二行聲明也說明了這個函數(shù)可以在 tut 模塊外被其它模塊調(diào)用。后面會詳細(xì)說明這一點。請再次注意這一行末尾的句號。

接下來給出一個更加復(fù)雜的例子,計算一個數(shù)的階乘。比如,4 的階乘即為 432*1,等于 24。

在 tut1.erl 文件中輸入如下的一段代碼:

-module(tut1).
-export([fac/1]).

fac(1) ->
    1;
fac(N) ->
    N * fac(N - 1).

所以在模塊 tut1 中存在一個函數(shù) fac,此函數(shù)接受一個輸入?yún)?shù) N。

第一部分說明的是 1 的階乘即為 1:

fac(1) ->
    1;

需要注意的是,這一部分是以分號結(jié)束的,這也就表示后面還有 fac 函數(shù)的更多內(nèi)容。

第二部分表示 N 的階乘為 N 乘以 N-1 的階乘:

fac(N) ->
    N * fac(N - 1).

與前面不同,這部分是以句號結(jié)尾的。這也就是說,后面沒有這個函數(shù)更多的內(nèi)容了。

編譯這個文件:

5> c(tut1).
{ok,tut1}

下面計算 4 的階乘:

6> tut1:fac(4).
24

調(diào)用 tut1 模塊中的 fac 函數(shù),傳入的參數(shù)為 4。

與其它語言一樣,Erlang 函數(shù)也可以有多個參數(shù),讓我們擴展 tut1 模塊,實現(xiàn)一個函數(shù)完成兩個數(shù)相乘:

-module(tut1).
-export([fac/1, mult/2]).

fac(1) ->
    1;
fac(N) ->
    N * fac(N - 1).

mult(X, Y) ->
    X * Y.

需要注意,擴展模塊時,需要修改 -export 這一行。在這一行中添加另外一個接受兩個參數(shù)的函數(shù) mult。

編譯:

7> c(tut1).
{ok,tut1}

使用一下新函數(shù):

8> tut1:mult(3,4).
12

在這個例子中,數(shù)字是整數(shù)值,代碼中函數(shù)的參數(shù) N、X 與 Y 被稱之為變量。變量必須以大寫字母開始 (參考變量)。諸如,Number、ShoeSize 和 Age 都是變量。