Atom,Tuple,List
とりあえず、「Getting Started With Erlang」を読みつつ、気になった点などをまとめていくことにします。今日は 2.1 The Erlang Shellから2.5 Listsまで。
アトム
Rubyのシンボルに近いイメージの定数?みたいなもの。
→2.3 Atoms
- 小文字で始まる文字列がアトムになります。
- パターンマッチで使えます。
- 1とか0とかでもパターンマッチによる分岐は実現できますが、いわゆるマジックナンバーになります。そこで代わりにアトムを使うと直感的でわかりやすいコードになります。
- 文字列を使っても可読性はいいけど、アトムの方がよりシンプルで速そう。
-module(atom). -export([call/1]). % 引数 mii でcallが実行されたら "mii: meow!"を表示。 call( mii ) -> % miiがAtom io:put_chars("mii: meow!\n"); % パターンマッチが続く場合、"."ではなく";"にする。 call( tora ) -> io:put_chars("tora: meow!\n"); call( kuro ) -> io:put_chars("tora: meow!\n"). % 最後のパターンマッチは"."で終了。
実行してみます。
1> c(atom). {ok,atom} 2> atom:call(mii). mii: meow! ok 3> atom:call(tora). tora: meow! ok
タプル
タプルはデータの集合です。複数のデータを1つにまとめる時に使います。
→2.4 Tuples
- 「{<値>,<値>,...}」の形式で定義します。
- 戻り値で返すこともできます。これにより複数のデータを返す関数が作れます。
- ネストしたタプルも作成できます。
-module(tuple). -export([slide/2]). % 座標{W,H}(←)を {X,Y}だけスライドする。 slide( { W, H }, { X, Y } ) -> { W+X, H+Y }.
実行結果です。
12> tuple:slide({10,10},{3,2}). {13,12} 13> tuple:slide(tuple:slide({10,10},{3,2}),{2,5}). {15,17}
リスト
リストは配列です。
→2.5 Lists
- 「[<値>,<値>,...]」の形式で定義します。
- タプルと違って長さは不定です。
- 要素を分割する「|」を使って配列の一部を取り出せます。きっと他にも素敵な機能があるに違いない。(最後の要素を取得するとか。)
-module(list). -export([sum/1]). % 配列の合計を返す。 sum([]) -> 0; sum( [First|Rest] ) -> First + sum( Rest ). % 「|」で配列を分割。Firstが最初の要素になる
実行結果です。
15> list:sum([1,2,3,4]). 10 16> list:sum([1,2,3,4,5]). 15