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)
    }
};

再帰呼び出しの深さに制限がある。