Erlang程式設計入門之認識其模組和函式

2021-08-25 20:12:07 字數 2083 閱讀 4926

【it168 技術文件】乙個程式語言如果只能讓我們從shell中執行**,那麼可以說這個語言的用處受到了很大的限制,至少我會感覺到不爽。這裡有乙個小的erlang程式。我們將下面的內容鍵入乙個叫做tut.erl的檔案(這裡需要注意到的是我們的tut.erl檔案應該放在erl程式的同乙個目錄下,檔名應該和模組名相同,這樣erlang才能很好的找到我們的模組,至於編輯器隨便乙個支援純文字的就可以哈)。如果我們的編輯器有乙個erlang模式就可能編寫起來更加方便,並且**的格式也會變得更加規範,但是我們也許也會產生對這些編輯器或者ide的強烈依賴性。下面就是我們要鍵入的**:

-module(tut).

-export([double/1]).

double(x) ->

2 * x.

不難看出,我們的程式的任務就是將輸入的數字進行「乘以2」的操作。我們後面會解釋前兩行的含義。我們現在來編譯一下這個程式,我們在erlang shell中鍵入下面的內容:

3> c(tut).

告訴我們編譯成功的完成了。如果顯示的是「error」,那麼可能我們的檔案位置或者鍵入的**文字存在某些問題,出錯資訊會給我們一些提示,我們按照提示做就好了,仔細的檢查**在任何時候都是需要的 : )

現在我們來執行以下這個程式:

4> tut:double(10).

20和預計的一樣,10的「乘以2」之後是20(貌似是廢話)。

現在讓我們回到最開始的兩行**。erlang程式一般是儲存在檔案中的。每個檔案我們在erlang中稱為module(模組)。第一行就是告訴我們這個模組的名字。

-module(tut).

這段**告訴我們該模組的名稱為「tut」。注意這行最後的「.」符號是必不可少的。這個模組名必須和儲存這段**的檔案(字尾為「erl」的檔案)有相同的名稱。所以這裡我們要求了檔名必須是「tut.erl」的原因。當我們在使用另乙個模組中的函式時,我們使用下面的語法module_name:function_name(arguments).所以:

4> tut:double(10).

意味著我們從tut模組中呼叫乙個叫做double的函式,並且帶有引數「10」.

第二行:

-export([double/1]).

含一位模組tut中包含乙個名叫double的函式,並且帶有乙個引數(就是例子中的「10」),並且這個函式可以被從模組tut之外呼叫到。更深入的內容我們後面會介紹。現在回頭看看上面行尾的句號「.」。

現在有乙個稍微複雜一點的例子,是用來進行階乘(比如4的階乘就是1*2*3*4的結果)操作的。鍵入下面的**到乙個新建的文字檔案,並命名為tut1.erl:

-module(tut1).

-export([fac/1]).

fac(1) ->

1;fac(n) ->

n * fac(n - 1).

編譯這個檔案:

5> c(tut1).

現在我們計算4的階乘:

6> tut1:fac(4).

24第一部分:

fac(1) ->

1;含義為1的階乘是1.注意到這部分最後的「;」符號,它預示著下面還有這個函式的其他部分。第二部分:

fac(n) ->

n * fac(n - 1).

含義是n的階乘等於n乘以n-1的階乘。注意這部分最後的符號「.」,含義為對於該函式已經沒有更多的內容了,函式就此結束。

乙個函式可以有很多的引數。讓我們擴充套件這個tut1模組,現在多包含乙個「白痴函式」:兩個數的相乘:

-module(tut1).

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

fac(1) ->

1;fac(n) ->

n * fac(n - 1).

mult(x, y) ->

x * y.

注意到我們也擴充套件了-export這行,加入了乙個包含兩個引數的函式mult。

編譯一下:

7> c(tut1).

試一下我們的**是否正常工作了:

8> tut1:mult(3,4).

12上面的例子使用了整數進行乘法運算,其中n/x/y成為變數。注意:變數必須是以大寫字母開頭,否則編譯會提示出錯。下面的變數名就是合法的:number,shoesize,age等。

Erlang程式設計入門之併發程式設計 程序

使用erlang而不是其他函式式語言的乙個很主要的原因就是 erlang具有處理併發和分布式計算的程式設計能力。我們這裡說的併發是指程式可以在同乙個時點處理多個執行緒的執行。例如,現代作業系統可以允許你使用word的同時使用excel,並且還開著乙個電子郵件客戶端程式,乙個列印的任務在後台也在執行著...

Erlang程式設計快速入門

相當於 hello world 吧。原文在此 unix系統下輸入 erl windows系統下雙擊erlang的圖示。你應該會看類似下面的提示資訊 os prompt erl erlang r13b erts 5.7.1 smp 4 4 rq 4 async threads 0 kernel pol...

Erlang入門(二) 併發程式設計

erlang中的process 程序是輕量級的,並且程序間無共享。查了很多資料,似乎沒人說清楚輕量級程序算是什麼概念,繼續查詢中。閒話不提,進入併發程式設計的世界。本文算是學習筆記,也可以說是 concurrent programming in erlang 第五張的簡略翻譯。1.程序的建立 程序是...