読者です 読者をやめる 読者になる 読者になる

Erlang 基礎ポイント1 - 紹介, 文法

1・2年ごとに新しい言語を勉強している。

PythonScalaLispに続けて、今年からはErlang.

メインはJavaJavascriptだが、他の言語を接することで

問題解決やアイデア作りに役立っているを実感している。

これから数回に分けて勉強した内容を書くつもり。

目標は網羅でなく、ポイントをつかむことだ。

 

Erlangとは

Erlangはエリクソン社が開発したプログラミング言語である。

少ないコード量で並列処理・ネットワーク処理を記述できる。

LinuxWindowsをはじめとして、色々なOSで動く。

 

参考書 

練習問題が曖昧な部分があるが、大体読みやすい。

実行環境

  1. REPL(Read Eval Print Loop)ができるシェル(erl)を備えている。勉強や検証時にうってつけだ。
  2. プログラムがある程度規模がある場合、コンパイル(erlc)して実行(erl)する。

 

文法

行の最後にはピリオドを置く。

 1> Fruit = "apple".

変数は大文字で始まる。

1> Fruit = "apple".

"apple"

 

小文字で始まると、アトムになる。

アトムはJavaenum定数のようなものだと考えればいいだろう。

変数のようにメモリ番地を指すのではなく、

名前(リテラル)そのものが意味を持つ。

 

つまり、以下のappleappleそのもので、メモリのある番地を

表すものではないのだ。

2> apple.

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らしくていいのでは?

 

 今日はここまで。