Erlang-functions

提供:Dev Guides
移動先:案内検索

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)*として呼び出された場合、プログラムはエラーになります。