ochalog

Ruby と MediaWiki が好きな電子・情報系の学生のブログ。

Erlang 先生に家計簿の穴埋めを手伝ってもらった

Erlang 先生に、自分が定食とカレーとうどんをどれだけ食べていたか教えてもらった話。

問題

家計簿 7 日分をつけ忘れてしまった。

  • つけ忘れた分は学校の食堂での昼食代。全部で 2,290 円。
  • 1 日につき以下のいずれかを 1 つ食べた。
    • 定食:370 円
    • カレー:350 円
    • 肉うどん:300 円

以上の条件から、各メニューを何回食べたかを求める。

コード

以下を lunch.erl というファイルに書く。

Gist: ochaochaocha3/lunch.erl

結果

Erlang シェルで以下の結果が得られた。

$ erl
Erlang/OTP 17 [erts-6.3.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V6.3.1  (abort with ^G)
1> c(lunch).
{ok,lunch}
2> lunch:calc().
[[{{set,370},2},{{curry,350},1},{{udon,300},4}]]

というわけで、定食を 2 回、カレーを 1 回、うどんを 4 回食べていたことが分かった。

感想

f:id:ochaochaocha3:20150214112530j:plain
Wikipediaファイル:Nikuudon.jpg」より。Hykw-a4 さん撮影。

肉うどん率高いな!

…というのはどうでもよく、Erlang(に限らずおそらく関数型言語全般)では数学の答えのように簡潔に書けるのがいいな、と思った。

なぜ Erlang に手を出したか

本屋さんで『すごい E 本』を見つけて思わず買ってしまったのがきっかけでした。

すごいErlangゆかいに学ぼう!

すごいErlangゆかいに学ぼう!

すごいErlangゆかいに学ぼう!

すごいErlangゆかいに学ぼう!

Erlang だとサーバーを書きやすい」という噂を見たのもひとつ。私は最近、RGRBクリエイターズネットワークで使われている IRC ボット)やボーンズ&カーズ(BCDice;どどんとふで使われているダイスボット)といった、IRC ボットのコードを書いているので、こちらの方面に活かすことを目指したい。