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 にするかは後で考えておく予定です。