ErlangのEshellで遊んでみた
今年の目標の一つとしてErlangを覚えるというのを挙げたので、さっそく「プログラミングErlang」を手に入れて読み始めた。とりあえず目次に目を通して思ったこと。
https://twitter.com/#!/inoshiro/status/154606384397303808:twitter:detail:left
第1章はErlangを学ぶべき理由と各章についての説明。
第2章からは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章の残りはタプル、リスト、文字列、パターン照合について。