SICP(計算機プログラムの構造と解釈)の問題4.21 にある Y Combinator を JavaScript で実装してみる。
Factorial のスクリプトコード
(function (n) { return (function (fact) { return fact(fact, n); })((function (ft, k) { return k == 1 ? 1 : k * ft(ft, k - 1); })); })(10)
実行結果
Fibonacci のスクリプトコード
(function (n){ return (function (fib) { return fib(fib, n); })((function (fb, k) { switch (k) { case 0: return 0; case 1: return 1; default: return fb(fb, (k - 1)) + fb(fb, (k - 2)); }; })); })(10)
実行結果
even? odd? のスクリプトコード
var f = function (x) { return (function (even, odd) { return even(even, odd, x); })((function (ev, od, n) { return n == 0 ? true : od(ev, od, n - 1); }), (function (ev, od, n) { return n == 0 ? false : ev(ev, od, n - 1); })); };
実行結果 f(42)
実行結果 f(37)