無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

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