Erlang勉強会#1に参加しました

関西にしては濃い目の勉強会のようでした。堪能しました。以下、個人的なメモです。

  • erlシェルは、Windowsの人はGUIの方を使うべき。履歴が使える。
  • エラーメッセージはよくわからない。エラーのでたことしか読み取れない。
  • lists:mapにいちいち無名関数で渡さないといけないの? → fun foo/1みたいな省略記法があるみたい。
  • io:formatの~pはとりあえず覚えておくといいみたい。Rubyのpぽい。
  • erlシェルでio:[Tab]で補完できる。使える関数が表示される。ここでマニュアルが引ければベストなんだけど。
  • EmacsErlangモードを使ってると「;」と「,」と「.」が好きになってくる。これはこれでありかもという気がする。
  • ifとかcaseとかで最後のendの前には;はいらない。みんなはまってた。テキストが悪い?
  • HIGHER ORDER PERLPerlを関数型ぽく使う話。Rubyでも遅延評価とか無限リストとかカリー化とか使いたいときがたまにあるから、興味津々。早々に購入すること。
  • PerlHaskellは対極に位置する。「Perlにはけがれしかない」らしい。Prologは次元が違う。直交してる。
  • SOAPAJAX、COMETは洗剤の名前が由来らしい。日本からも洗剤の名前を。きれいきれいか?
  • ローマ数字を整数に変換する。エラーチェックに正規表現を使ってこんなのになりました。正規表現を使ってるので関数型言語的にいまいち。yuyaさんが言ってた、文字列の2文字目までパターンマッチしてI、V…の順番をチェックして、IとかVとかの連続は引数に持ち回ってカウントするのがよさそう。んー、手でパーサを書くようなイメージ。Haskellだったら僕はPersec使うかな。やっぱり。

ファイル: roman.erl

-module(roman).
-export([old_roman_to_integer/1, main/1]).

old_roman_to_integer_([]) -> 0;
old_roman_to_integer_([$I | Xs]) ->    1 + old_roman_to_integer_(Xs);
old_roman_to_integer_([$V | Xs]) ->    5 + old_roman_to_integer_(Xs);
old_roman_to_integer_([$X | Xs]) ->   10 + old_roman_to_integer_(Xs);
old_roman_to_integer_([$L | Xs]) ->   50 + old_roman_to_integer_(Xs);
old_roman_to_integer_([$C | Xs]) ->  100 + old_roman_to_integer_(Xs);
old_roman_to_integer_([$D | Xs]) ->  500 + old_roman_to_integer_(Xs);
old_roman_to_integer_([$M | Xs]) -> 1000 + old_roman_to_integer_(Xs).

old_roman_regexp() ->
    "^M?M?M?M?D?D?D?D?C?C?C?C?L?L?L?L?X?X?X?X?V?V?V?V?I?I?I?I?$".

old_roman_to_integer("") -> throw("empty string.");
old_roman_to_integer(S) ->
    case regexp:match(S, old_roman_regexp()) of
	{match, _, _} ->
	    old_roman_to_integer_(S);
	nomatch ->
	    throw("invalid input.");
	{error, _} ->
	    throw("internal error.")
	end.

main(Args) ->
    lists:foreach(fun(A) -> io:format("~.10B~n", [old_roman_to_integer(A)]) end, Args).

二次会は(歌わない)カラオケ。

  • エディタの話。(EmacsVim、最近はブラウザ上でViが動くらしい)
  • xyzzyは読み方がよくわからない。「亀さんエディタ」が個人的にヒット。TortoiseCVSも「亀さん」らしい。こちらも採用。
  • シェルで&&。makeしたけどmake installを付け忘れたとき、どうするか? pwaitで待つ? Ctrl-Cする?

Higher-Order Perl: Transforming Programs with Programs

Higher-Order Perl: Transforming Programs with Programs