Thyme 覚書
基本
- 2D物理シミュレーションソフト Phun 及び Algodoo に実装されているスクリプト言語
- 設定ファイルやシーンファイルの中身もThyme
- 関数がファーストクラスオブジェクト
- 関数リテラル (x) => { f(x) ; g(x) }
- 関数の最後の式の値が返り値になる
- 関数は引数が0個か1個なら括弧が省略できる
- 条件演算子 a ? b : c
- 基本型: Int, Float, Bool, String
- リストリテラル [a, b, c, d]
- [a, b, c] (1) で b が返る(括弧は省略できる)
- 識別子の宣言は:=を、再代入には=を使う
- 宣言しなくても=で代入できる
- 宣言済みの識別子に:=を使うとWarningが出る
- トップレベルの識別子はconfig.cfgに保存される
- シーンごとの識別子はScene.myのメンバとして宣言する Scene.my.myVar = 42;
制御構文
関数
関数リテラルは次のように書く。
(x)=>{ x+1 }; // 1引数の関数 (x,y)=>{ x+y }; // 2引数の関数 ()=>{ print 42 }; // 0引数の関数 { print 42 }; // 0引数の関数
関数に続けて実引数を書くと、関数の値が返る。
(x)=>{ x+1 } 2; // == 3 (x,y)=>{ x+y } (1, 2); // == 3 ()=>{ print 42 } (); // コンソールに42と表示される { print 42 } (); // 同上
条件演算子
条件演算子は、先に各項の評価が行われる。
true ? print 1 : print 2
これだと1と2の両方が表示される。
これを避けるには、{}でくくって、項を関数にする。
true ? {print 1} : {print 2}
条件演算子は項が0引数の無名関数の場合、その関数を実行する。そのため、{print 1}が返るのではなく、1が表示される。
for関数
最初からfor関数が定義されている。
for = (n, what)=>{ n <= 0 ? false : { for(n - 1, what); what(n-1) } };
再帰呼び出しの深さに制限がある。