Erlang

Erlangを愉快に学ぶ会 #1

すごいErlang愉快に学ぼう #1

関西Lispユーザー会に行ったら話に出てきたので。
なんか読んでみようと思ったんだよね。
結構面白いという話も聞いたし、なんか気になったから。
んで、せっかくなのでまとめていきます。

ちなみにMacの方は
brew install erlang

でDLできた気がするが忘れてしまった。

ただし読書にはルールがあります。
- 絶対に1日1章以上は読まない
- 可能なら読書後に読書録を作る
- 読書録の生成は気乗りしない場合はやらなくて良い!

それでは第一章から!

変数

rlangはPrologに強く影響を受けているため変数の宣言は必ず大文字になっている必要がある。

VarErlang.erl
X = 10.
Y = 5.0.

ちなみに変数へは代入するのではなくバインドする。
C言語やRubyなどのプログラマにとって変数は値を入れておく箱のようななものと教わったと思うんだけどこの言語では違う。
数学的な考えになっている。
つまりX = 1とはプログラム実行中はずっと X = 1 なのである。例外は今のところ無いと思う。

ほかに重要なのは文の最後に.を付けないといけないこと。
こうしないと動かないので!C言語の;と思えば良いかなと

変数は関数型言語らしく再代入不可能の参照透過を確保された形に。

アトム

変数は大文字で始まったが小文字で始まる形式も存在する。
それがアトムである。

hello.

アトムは記述自体が一つの意味を持つ。文字列のような違うような...
イメージとしては連想配列のキーのような存在だろうか。Rubyのシンボルみたいな感じ。
(この辺の認識は怪しいので詳しい方がおられたらツッコミを頂戴したいです。)

注意!

ちなみにアトムはメモリを食う。GCの対象にもならずプログラムが停止するまでアトムの数だけメモリを専有する。
何が言いたいのかというと、動的にアトムを生成するといずれリソースを食い尽くす

タプル

タプルがある。しかしリスト(配列)もある。
タプルは

{osaka, sunny}.

のように書く。{}の中には 67108863 まで値を挟める。.を忘れずに!

リスト

配列である。

X = [1,2,3,4,5].
X = [1,2,iamatom, {osaka, rain}].

こんなかんじ。
なんでも入れられるところはスクリプト言語的な感じがする

リスト内包表記

RubyでいうところのArray#Mapのような記法。
ぎりぎりFor文と言い張ることができるかもしれない。

LIST = [1,2,3,4,5].
[N * N || N <- List].
>[1,4,9,16,25]

こんな感じの書き方になる。
構文的には
[処理 || 一時変数にバインドする <- リスト(配列)].
となる。
ちなみにタプルを含んだ配列でも使える

List = [{osaka, rainy}, {tokyo, sunny}].
[{P, W} || P, sunny <- List].
>[{tokyo,sunny}]

こんな感じになる。
この辺はループ処理と何ら変わらないが一時変数にバインドする時にパターンマッチングを挟むことができる