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();という形)は必ず最適化されるので、スタックが溢れることはありません。
ただし、現時点での実装では、普通にループした方が速いです。