kuzha で Y コンビネータ

元ネタは Y コンビネータって何? - IT戦記Y Combinator から、kuzha で Y Combinator を作ってみた。

ku> Y = fun f do
  >     temp = fun proc(
  >         f: fun arg do
  >             temp = proc: &proc;
  >             return temp: arg;
  >         end
  >     );
  >     return temp: fun proc(
  >         f: fun arg do
  >             temp = proc: &proc;
  >             return temp: arg;
  >         end
  >     );
  > end;
ku> fact = Y: fun f (fun n (n <= 1 ? 1 : n * (f: n-1)));
ku> fact: 10;
  >
3628800

間違えやすいのは関数を引数にするときに & を付けないと関数が評価されちゃうこと。
現時点での kuzha では proc(proc)(arg) みたいなことが出来ないので やむなく temp を介すことに。proc: &proc: arg を出来るようにするか、あるいは (proc: &proc) call arg にするかは後で考えておく予定です。