dofun

dofunは、定義して即座に実行される関数です。

ret: dofun(i: 33){
  if(i<2)
    return 1;
  return callee(i-2) + callee(i-1);
}

ret.p;

dofunは必然的に無名関数となりますが、calleeを使うことで再帰も出来ます
最初の引数はデフォルト引数が使われます。

あなたがループが大嫌い、再帰大好きという関数型人間なら、これをwhileやfor等のループの代わりに使うと、面白いかもしれません。

n: 0;
for(i: 0; i<10; ++i){
  n += i;
}
n.p;

/// 上と下は同じ結果を出力します

ret: dofun(i: 0, n: 0){
   if(i<10)
     return callee(i+1, n+i);
   return n;
}
ret.p;

xtalは末尾関数呼び出し(return foo();という形)は必ず最適化されるので、スタックが溢れることはありません。


ただし、現時点での実装では、普通にループした方が速いです。