2007-05-02
■ [erlang] Erlang触ってみた
NコアのプロセッサならN倍速く動くというフレーズに釣られてErlang触ってみた。
Debianだとapt-get install erlang でインタプリタが入る。超簡単。
参考文献は以下のような感じ。
「!」でメッセージ送信ってのはπ計算を思い出すな。
reverseはこんな感じ (kmonos.netより)
reverse(List) -> case List of [] -> []; [Head|Tail] -> reverse(Tail) ++ [Head] end.
いかにも関数型っぽい。HaskellとかOCamlを知らない人は面食らうだろうなぁ。
ついでなんで文中にある「[|]だけのreverse」を実装してみた。
sample.erl:
-module(sample). -export([reverse/1, revs/1]). reverse(List) -> case List of [] -> []; [Head|Tail] -> reverse(Tail) ++ [Head] end. rev(List, Rest) -> case Rest of [] -> List; [Head|Tail] -> rev([Head|List], Tail) end. revs(List) -> rev([], List).
erlで起動。sample.erlを読み込んでみる。
yhara@meteor:~/src/erlang % erl Erlang (BEAM) emulator version 5.5.2 [source] [64-bit] [async-threads:0] [kernel-poll:false] Eshell V5.5.2 (abort with ^G) 1> c(sample). {ok,sample}
とりあえずreverse。
2> reverse([1,2,3]). =ERROR REPORT==== 3-May-2007::02:17:18 === Error in process <0.30.0> with exit value: {undef,[{shell_default,reverse,[[1,2,3]]},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]} ** exited: {undef,[{shell_default,reverse,[[1,2,3]]}, {erl_eval,do_apply,5}, {shell,exprs,6}, {shell,eval_loop,3}]} **
エラーメッセージが絶望的に意味不明だが、「{undef,」の部分から未定義変数のなんからしいと分かる。
そうか、モジュールを指定しないと。
3> sample:reverse([1,2,3]). [3,2,1]
こうね。
4> sample:revs([1,2,3]). [3,2,1] 5>
うまく動いているようだ。
SDLバインディングもあるので(esdl) ゲームも作れる模様。 全てのキャラが並列に動作するゲームとか格好よくね!?