おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

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"