kuzha で Y コンビネータその2

とりあえず匿名メッセージを送ると関数が呼び出されるようにしてみた。

ku> sample = ^(puts: "Hello!");
  > 
kuzha.object.KuFunction@929206

ku> &sample;
  > 
kuzha.object.KuFunction@929206

ku> &sample<!>;
  > 
Hello!

ので、さっきのYコンビネータを書き換えてみる。

ku> Y = fun f (fun proc (f: fun arg (proc: &proc, <!>: arg))
        <!>: fun proc (f: fun arg (proc: &proc, <!>: arg)));
  > fact = Y: fun f (fun n (n <= 1 ? 1 : n * (f: n-1)));
  > fact: 10;
  > 
3628800

実行。おk。匿名メッセージ <!> は後で変更するかも。