ErlangのEshellで遊んでみた

今年の目標の一つとしてErlangを覚えるというのを挙げたので、さっそく「プログラミングErlang」を手に入れて読み始めた。とりあえず目次に目を通して思ったこと。

https://twitter.com/#!/inoshiro/status/154606384397303808:twitter:detail:left

第1章はErlangを学ぶべき理由と各章についての説明。
第2章からはErlangをインストールし、シェル上でいろいろ動かしていく。

インストール

Mac OS X Lionで、homebrewからインストールした。

% brew install erlang

特に問題なくインストール完了。

シェルで遊ぶ

erlコマンドでErlangのシェルを起動する。

% erl
Erlang R14B04 (erts-5.8.5) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8.5  (abort with ^G)
1> 

公式サイトを見たら最新版は R15B のようなので、ちょっと古い。
適当に式を入力してみる。

1> 123 + 2312 - 382.
2053
2> 111 * (22 + 33).
6105
3> 100 / 20.
5.0
4> 10 % 3.
4> .
10
5> 

おや、余りが出るかなと思ったら何も出力されない。Erlangでは%がコメントなので、 % 3. はコメント扱いになっていた。もう一度ピリオドを打つと10だけが評価された。

5> "hogehoge".
"hogehoge"
6> abc.
abc
7> X = 12345.
12345
8> X
8> .
12345
9> X+X+X*X*X.
1881365988315
10> X = 123.
** exception error: no match of right hand side value 123
11> _HOGE = 9999.
9999
12> _HOGE.
9999
13> fuga = 32434.
** exception error: no match of right hand side value 32434
14> 1 == 1.
true
15> 2#11111111.
255
16> 16#ff.
255
17> 

文字列、変数代入、再度代入しようとしてexception errorが発生。Erlangは単一代入なので、変数に値を代入できるのは一度きり。そうすることでプログラムの問題個所を特定しやすくなるとのこと。また、このことがプログラムの並列化を容易にする、らしい。

6番目で何気なく abc. を評価したら abc が返ってきて、文字列として扱われてる?と思ったんだけど、先を読むとこれはアトムというものだった。アトムは数字以外の不変値のこと、とあった。
あと、Erlangはn進数をn#で始まる値で表すことができるようだ。

17> 3#111.
13
18> 100#12.
* 1: illegal base '100'
18> #12.
* 1: syntax error before: 12
18> 33#111.
1123
19> 10 div 3.
3
20> 10 rem 3.
1
21> 36#11.
37
22> 37#11.
* 1: illegal base '37'
22> #11.
* 1: syntax error before: 11
22> 

n進数は2~36が有効範囲だね。あと、余剰の求め方も出てきた。remを使えば良いみたいだ。

今日はとりあえずここまで。第2章の残りはタプル、リスト、文字列、パターン照合について。