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

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

組み込み関数と高階関数

Getting Started With Erlang2.12 Built In Functions (BIFs)2.13 Higher Order Functions (Funs)についてまとめ。

組み込み関数

FizzBuzzで使用した"rem"などが組み込み関数として用意されています。

  • 組み込み関数はerlangモジュールに属する。
  • 呼び出す時にはモジュール名を省略できる。

サンプル。「date().」は「erlang:date().」と同じ。

1> date().
{2007,11,12}
2> erlang:date().
{2007,11,12}

高階関数(Higher Order Functions)

JavaScriptの関数オブジェクトみたいなもの。(という認識でよいのかな?)

  • 「<変数名> = fun(<引数,..>) -> <関数の処理> end.」の形式で作成する。変数に関数が代入されるイメージ。
  • 作成後は「<変数名>(<引数,..>).」で関数を実行できる。
  • 変数になっているので関数の引数で渡したりできる。
  • 「fun [<モジュール名>:]<関数名>/<引数の数>」で定義済みの関数を高階関数として取得できる。

高階関数のサンプル。配列を列挙します。

-module(each).
-export([each/2]).

% 配列を列挙する。
each( [], Fun ) ->
  ok;
each( [H|R], Fun ) ->
  Fun(H),
  each( R, Fun ).

実行してみます。

19> each:each([tora, mii, kuro, shiro], fun(K)-> io:format("~w~n", [K])  end ).
tora
mii
kuro
shiro
ok

↑では引数を無名関数として作成していますが、↓これでもOK。関数をあらかじめ定義しておき、それを引数で指定します。

-module(each).
-export([each/2, out/1]).

% 配列を列挙する。
each( [], Fun ) ->
  ok;
each( [H|R], Fun ) ->
  Fun(H),
  each( R, Fun ).

% データを出力する。
out( K ) -> io:format( "~w~n", [K] ).

実行。

22> each:each([tora, mii, kuro, shiro], fun each:out/1 ).
tora
mii
kuro
shiro
ok