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"