Erlang-loops
提供:Dev Guides
アーラン-ループ
Erlangは関数型プログラミング言語であり、すべての関数型プログラミング言語について覚えておく必要があるのは、ループの構造を提供しないことです。 代わりに、関数型プログラミングは再帰と呼ばれる概念に依存しています。
whileステートメントの実装
Erlangには直接のwhileステートメントはありませんので、whileステートメントの実装を実行するには、Erlangで利用可能な再帰手法を使用する必要があります。
他のプログラミング言語で行われているのと同じwhileループの実装に従うようにします。 次に、一般的なフローを示します。
Erlangで while ループを実装するために再帰を使用する方法の例を見てみましょう。
例
-module(helloworld).
-export([while/1,while/2, start/0]).
while(L) -> while(L,0).
while([], Acc) -> Acc;
while([_|T], Acc) ->
io:fwrite("~w~n",[Acc]),
while(T,Acc+1).
start() ->
X = [1,2,3,4],
while(X).
上記のプログラムについて、次のキーポイントに注意する必要があります-
- whileループの実装をシミュレートするwhileと呼ばれる再帰関数を定義します。
- 例として、変数Xで定義された値のリストをwhile関数に入力します。
- while関数は各リスト値を取得し、中間値を変数「Acc」に保存します。
- リスト内の各値に対してwhileループが再帰的に呼び出されます。
上記のコードの出力は次のようになります-
出力
0
1
2
3
声明のために
Erlangには直接の for ステートメントはないため、 for ステートメントの実装を実行するには、Erlangで使用可能な再帰手法を使用する必要があります。
他のプログラミング言語で行われているのと同じ for ループの実装に従うようにします。 以下は、順守すべき一般的な流れです。
Erlangで再帰を使用して for ループを実装する方法の例を見てみましょう。
例
-module(helloworld).
-export([for/2,start/0]).
for(0,_) ->
[];
for(N,Term) when N > 0 ->
io:fwrite("Hello~n"),
[Term|for(N-1,Term)].
start() ->
for(5,1).
上記のプログラムについて、次のキーポイントに注意する必要があります-
- * forループ*の実装をシミュレートする再帰関数を定義しています。
- 「for」関数内でガードを使用して、Nの値または制限が正の値であることを確認しています。
- 各再帰でNの値を減らすことにより、for関数を再帰的に呼び出します。
上記のコードの出力は次のようになります-
出力
Hello
Hello
Hello
Hello
Hello