0

Erlangの通貨プログラミングを学ぼうとしています。

これはErlang.orgから入手したサンプルプログラムですが、実行方法についての説明はありません。

私はそれをこのように実行します、

1> counter:start() 
<0.33.0>

しかし、プロセス(counter:start())が受信したメッセージに従って作業を実行できるように、他の関数を実行する方法がわかりません。

2つ以上のプロセスが実際に生成されたことを確認するにはどうすればよいですか?

別の質問、関数で受信したメッセージを印刷する方法は?

 -module(counter).
 -export([start/0,loop/1,increment/1,value/1,stop/1]).

 %% First the interface functions.
 start() ->
       spawn(counter, loop, [0]).

 increment(Counter) ->
       Counter ! increment.

 value(Counter) ->
             Counter ! {self(),value},
      receive
              {Counter,Value} ->
                    Value
    end.
stop(Counter) ->
    Counter ! stop.

%% The counter loop.
 loop(Val) ->
    receive
            increment ->
                    loop(Val + 1);
            {From,value} ->
                    From ! {self(),Val},
                    loop(Val);
            stop -> % No recursive call here
                    true;
            Other -> % All other messages
                    loop(Val)
    end.

どんな助けでもありがたいです。

ありがとう

4

2 に答える 2

2

Emilの発言に加えて、このi()コマンドを使用して、実行中のプロセスを確認できます。3つのカウンターを始めましょう:

1> counter:start().
<0.33.0>
2> counter:start().
<0.35.0>
3> counter:start().
<0.37.0>

そして実行しますi()

...
<0.33.0>              counter:loop/1                         233        1    0
                      counter:loop/1                           2              
<0.35.0>              counter:loop/1                         233        1    0
                      counter:loop/1                           2              
<0.37.0>              counter:loop/1                         233        1    0
                      counter:loop/1                           2              
...

ご覧のとおり、上記のプロセス(33、35、37)は正常に実行されており、counter:loop/1関数を実行しています。プロセス37を停止しましょう:

4> P37 = pid(0,37,0).
<0.37.0>
5> counter:stop(P37).
stop

プロセスの新しいリストを確認する:

6> i().

なくなったことを確認する必要があります。

于 2012-04-20T07:48:35.107 に答える
2

他の関数は、次のように、作成したばかりのモジュールを使用します。

C = counter:start(),
counter:increment(C),
counter:increment(C),
io:format("Value: ~p~n", [counter:value(C)]).

実行pman:start()して (GUI) プロセス マネージャーを起動し、所有しているプロセスを確認できます。

于 2012-04-20T06:49:04.077 に答える