2008年1月2日水曜日

Erlangでメッセージパッシング

Erlangは言語レベルでメッセージパッシングの仕組みを持っている。
そこで、Erlangでメッセージパッシングのコードを書いてみた。

サンプルコード(echo.erl)

1 -module(echo).
2 -export([echo/0]).
3
4 echo() ->
5 receive
6 Msg -> io:format("~necho: ~p", [Msg]),
7 echo()
8 end.

1行目
 モジュールの宣言

2行目
 echo関数のエクスポート

4〜8行目が本体の関数です。メッセージを受け取り、標準出力に出力します。再帰することでなんどもメッセージを受け取るようにしています。具体的には以下。

4行目
 関数の開始。関数名は"echo"。

5行目
 receive式でメッセージを受け取る。

6行目
 Msgにメッセージが入る。io:formatで、受け取ったMsgを標準出力に出力する。

7行目
 echo関数を再帰的に呼ぶ。こうすることで、なんどもメッセージを受け取ることができる。

8行目
 receive式を閉じる。

実行例

$ erl
1> c(echo.erl).
{ok,echo}
2> Pid = spawn( echo, echo, [] ).
<0.40.0>
3> Pid ! "Hello!".
"Hello!"
echo: "Hello!"
1行目
 echo.erlをコンパイル。

2行目
 echo関数をプロセスとして呼び出し。
 プロセスIDが返ってくるのでPidに入れる。
 <0.40.0>は返ってきたプロセスID。

3行目
 !演算子を使って、プロセスPidに"Hello!"メッセージを送る。
 echo関数がメッセージを受け取り、「echo: "Hello!"」を出力する。
 なお、その前の「"Hello!"」は!演算の評価結果。
 

0 件のコメント: