Erlang-functions
Erlang-関数
Erlangは関数型プログラミング言語として知られているため、Erlangで関数がどのように機能するかに重点を置くことが期待されます。 この章では、Erlangの機能を使用してできることをすべて説明します。
関数を定義する
関数宣言の構文は次のとおりです-
構文
FunctionName(Pattern1… PatternN) ->
Body;
どこで、
- FunctionName -関数名はアトムです。
- Pattern1…PatternN -各引数はパターンです。 引数の数Nは、関数のアリティです。 関数は、モジュール名、関数名、およびアリティによって一意に定義されます。 つまり、同じ名前で同じモジュール内の2つの関数が、異なるアリティを持つ2つの関数です。
- ボディ-句のボディは、コンマ(、)で区切られた一連の式で構成されます。
次のプログラムは、関数の使用の簡単な例です-
例
-module(helloworld).
-export([add/2,start/0]).
add(X,Y) ->
Z = X+Y,
io:fwrite("~w~n",[Z]).
start() ->
add(5,6).
次のポインタは、上記のプログラムについて注意する必要があります-
- 2つの関数を定義しています。1つは2つのパラメーターを取る add と呼ばれ、もう1つは start 関数です。
- 両方の機能は、エクスポート機能で定義されています。 これを行わないと、関数を使用できなくなります。
- 1つの関数を別の関数内で呼び出すことができます。 ここでは、start関数からadd関数を呼び出しています。
上記のプログラムの出力は次のようになります-
出力
11
無名関数
匿名関数は、名前が関連付けられていない関数です。 Erlangには、匿名関数を定義する機能があります。 次のプログラムは、無名関数の例です。
例
-module(helloworld).
-export([start/0]).
start() ->
Fn = fun() ->
io:fwrite("Anonymous Function") end,
Fn().
上記の例について、次の点に注意する必要があります-
- 無名関数は* fun()*キーワードで定義されます。
- 関数はFnという変数に割り当てられます。
- 関数は変数名を介して呼び出されます。
上記のプログラムの出力は次のようになります-
出力
Anonymous Function
複数の引数を持つ関数
Erlang関数は、0個以上のパラメーターで定義できます。 関数のオーバーロードも可能です。パラメーターの数が異なる限り、同じ名前の関数を複数回定義できます。
次の例では、関数demoは各関数定義の複数の引数で定義されています。
例
-module(helloworld).
-export([add/2,add/3,start/0]).
add(X,Y) ->
Z = X+Y,
io:fwrite("~w~n",[Z]).
add(X,Y,Z) ->
A = X+Y+Z,
io:fwrite("~w~n",[A]).
start() ->
add(5,6),
add(5,6,6).
上記のプログラムでは、add関数を2回定義しています。 ただし、最初のadd関数の定義は2つのパラメーターを受け取り、2番目の関数は3つのパラメーターを受け取ります。
上記のプログラムの出力は次のようになります-
出力
11
17
ガードシーケンスを使用する機能
Erlangの関数には、ガードシーケンスを持つ機能もあります。 これらは、trueと評価された場合にのみ関数を実行する式に他なりません。
ガードシーケンスを使用した関数の構文は、次のプログラムに示されています。
構文
FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;
どこで、
- FunctionName -関数名はアトムです。
- Pattern1…PatternN -各引数はパターンです。 引数の数Nは、関数のアリティです。 関数は、モジュール名、関数名、およびアリティによって一意に定義されます。 つまり、同じ名前で同じモジュール内の2つの関数が、異なるアリティを持つ2つの関数です。
- ボディ-句のボディは、コンマ(、)で区切られた一連の式で構成されます。
- GuardSeq1 -これは、関数が呼び出されたときに評価される式です。
次のプログラムは、ガードシーケンスを使用した関数の使用の簡単な例です。
例
-module(helloworld).
-export([add/1,start/0]).
add(X) when X>3 ->
io:fwrite("~w~n",[X]).
start() ->
add(4).
上記のプログラムの出力は-
出力
4
add関数が* add(3)*として呼び出された場合、プログラムはエラーになります。