Erlang 基礎ポイント1 - 紹介, 文法
1・2年ごとに新しい言語を勉強している。
Python・Scala・Lispに続けて、今年からはErlang.
メインはJava・Javascriptだが、他の言語を接することで
問題解決やアイデア作りに役立っているを実感している。
これから数回に分けて勉強した内容を書くつもり。
目標は網羅でなく、ポイントをつかむことだ。
Erlangとは
Erlangはエリクソン社が開発したプログラミング言語である。
少ないコード量で並列処理・ネットワーク処理を記述できる。
Linux・Windowsをはじめとして、色々なOSで動く。
参考書
練習問題が曖昧な部分があるが、大体読みやすい。
実行環境
- REPL(Read Eval Print Loop)ができるシェル(erl)を備えている。勉強や検証時にうってつけだ。
- プログラムがある程度規模がある場合、コンパイル(erlc)して実行(erl)する。
文法
行の最後にはピリオドを置く。
1> Fruit = "apple".
変数は大文字で始まる。
1> Fruit = "apple".
"apple"
小文字で始まると、アトムになる。
アトムはJavaのenum定数のようなものだと考えればいいだろう。
変数のようにメモリ番地を指すのではなく、
名前(リテラル)そのものが意味を持つ。
つまり、以下のappleはappleそのもので、メモリのある番地を
表すものではないのだ。
2> apple.
=を使った変数への代入は一回しかできない。
2回代入するとエラーになる。
10> Fruit = "apple".
"apple"
11> Fruit = "mango".
** exception error: no match of right hand side value "mango"
変数を不変にすることで、変数の値がどう変わるかをしなくていいので、
プログラムの把握がしやすい。
タプルは複数の要素を一つにまとめるもの。
Javascriptのオブジェクトリテラルに似ている。
2> Person = { name, "Duke" }.
{name,"Duke"}
実はErlangで=は代入でなくパターン照合を意味する。
6> Location = { "Japan", "Tokyo" }.
{"Japan","Tokyo"}
7> { Country, City } = Location.
{"Japan","Tokyo"}
8> Country.
"Japan"
9> City.
"Tokyo"
10> {A, atom} = { "Foo", atom}.
{"Foo",atom}
11> A.
"Foo"
Locationには、まだ値がバインドされていないので、Locationにタプルが入り、無事実行される
Locationに値が入っていたとしても、その値が{"Japan", "Tokyo"}なら、6行は真となる。
もし違う値が入っていたら、エラーとなる。
10行で左辺のatomは、ただのアトムであり、右辺のタプルと要素数を合わせるための
ダミーのようなものだ。
リストを作るためのネイティブ表記がある。
15> Planets = [{mercury, 1}, {venus, 2}, {earth, 3}].
[{mercury,1},{venus,2},{earth,3}]
16> [First,Second|Remaining] = Planets.
[{mercury,1},{venus,2},{earth,3}]
17> First.
{mercury,1}
18> Second.
{venus,2}
19> Remaining.
[{earth,3}]
22> lists:nth(1, Planets).
{mercury,1}
リストから要素を取り出したい時はパターン照合を使う。
listsモジュールのnthのような関数も使えるが、パターン照合の方が
Erlangらしくていいのでは?
今日はここまで。