/ / Erlangの関数の末尾再帰的インスタンス間で状態を維持する2つの方法は何ですか? - 再帰、erlang

Erlangの関数のテール再帰的インスタンス間に状態を維持する2つの方法は何ですか? - 再帰、erlang

手続き型言語(例えば、Java)における等価物は、その内容がそれらを使用および更新するループの外で宣言されたローカル変数(またはインスタンス変数)であろう。 Erlangでどうすればいいですか?

回答:

回答№1は4

再帰呼び出しでは、状態をパラメータとして渡します。 N個のメッセージを受け取り、それらをリストとして返すループの例:

loop(N) ->
loop(N, 0, []).

loop(N, Count, Msgs) when Count < N ->
receive
Msg -> loop(N, Count+1, [Msg|Msgs])
end;
loop(_, _, Msgs)
list:reverse(Msgs).

回答№2の場合は0

私はそれが宿題の質問ではないことを願っていますが、私は「二つの方法」と混同しています。

もちろん、最も適切な方法は、すべての必要なデータを運ぶために少なくとも1つの引数を持つ再帰関数定義。しかし、あなたがそれを使用することができず、そのような再帰的サイクルの1つのインスタンスが一瞬で有効になる(または適切に積み重ねられる)ことを確信していて、関数の呼び出しが同じプロセスにある場合、プロセス辞書はあなたを助けてください put() そして get()erlang モジュールとして使用され、キーとして使用される固有の用語を発明する。しかし、これは間違いなく一種のハックです。

1つは、より多くのハッキングを発明することができますが、それらはすべて醜いでしょう:)