Erlangの勉強その1
Erlangの変数は先頭大文字で表す。
Pi = 3.14159
Erlangの変数は単一代入変数なので、一度決定した(束縛済み)変数は変更できない。無理矢理変更しようとすると怒られる。
1> Pi = 3.14159.
3.14159
2> Pi = 3.14.
=ERROR REPORT==== 30-Dec-2008::07:59:21 ===
Error in process <0.30.0> with exit value: {{badmatch,3.140000e+00},[{erl_eval,expr,3}]}
**exited: {{badmatch,3.14000},[{erl_eval,expr,3}]}**
さらにいうと、「=」という記号は代入ではない。これはパターンマッチを意味する。
変数は最初、未束縛状態なので不定だけど、
Pi = 3.14159
というように書くと、3.14159とマッチさせるためにPiが3.14159になる。代入しているわけではないと考えたほうがいいのかも。
x = x + 1
というのは他のプログラミング言語ではよく見られる形だけど、Erlangではエラーになる。さらにいうと、Erlangはずっと数学的表現に近い。上記の式は数学として考えると間違っている(X と X + 1 が等しくなることはありえないから)。なのでエラーなのだ。一度決定した変数の値が変更できないのも数学の表現に近い。
Rubyでいうシンボルに近いものにアトムがある。これは小文字で始まる形で表す。大文字で始めたいときはシングルクォーテーションでくくるとアトムとして認識される。
1> book.
book
2> Pen.
**1: variable 'Pen' is unbound**
3> 'Pen'.
'Pen'
ハッシュに近いものにタプルがある。でもハッシュというよりはRindaで使うタプルに似ている。タプルは{}でくくる。
{index, {age, 33}, {tel, 0399999999}}
パターンマッチを利用してタプルの内容を取得できる。
1> Address = {index, {age, 33}, {tel, 0399999999}}.
{index,{age,33},{tel,399999999}}
2> {index, Age, Tel} = Address.
{index,{age,33},{tel,399999999}}
3> Age.
{age,33}
4> Tel.
{tel,399999999}
リストと呼ばれる配列もある。
[1, second, {age, 33}]
リストに要素を追加するときは… | Tの形を利用する。 |
1> List = [1,2,3].
[1,2,3]
2> List2 = [4,5 | List].
[4,5,1,2,3]
文字列は実はリストである。ダブルクォーテーションで表すこともできる。
Eshell V5.5.2 (abort with ^G)
1> Name = "Tsukasa".
"Tsukasa"
2> [84, 115, 117, 107, 97, 115, 97].
"Tsukasa"