手続き型言語(例えば、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つは、より多くのハッキングを発明することができますが、それらはすべて醜いでしょう:)