Erlangプロセス Schemeアクタ
30分プログラム、その444。id:Gemmaさんに昔のbit誌にのっていた「Scheme 過去・現在・未来」のコピーを貰ったので、そこに載っていたSchemeのアクタをErlangで再現してみた。
やっていることはErlang プロセス <=> Scheme アクタ - Gemmaの日記と同じですし、bit誌の内容はおおよそhttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/actor/actor.htmlと同じです。
ただ、factrialのアクター版の定義にactrialと名付けていたのは半端なくクールだったのでマネせずにはいられなかっただけです。
使い方
1> actrial:test(10). {10,<0.54.0>} 3628800
ソースコード
-module(actrial). -compile([export_all]). display() -> spawn(fun() -> receive K -> io:format("~p~n",[K]) end end). actrial() -> spawn(fun() -> receive {0,K} -> K ! 1; {N,K} -> actrial() ! {N-1, spawn( fun() -> receive U -> K ! (N*U) end end)} end end). test(N) -> actrial() ! {N,display()}.