Y コンビネータ(Combinator)を JavaScript で試す

SICP(計算機プログラムの構造と解釈)の 問題4.21 にある Y コンビネータ(Combinator)を JavaScript で実装してみる。

デモ:Y Combinator with JavaScript – SICP(計算機プログラムの構造と解釈) 問題4.21

Factorial

Factorial のスクリプトコード

(function (n) {
    return (function (fact) {
        return fact(fact, n);
    })((function (ft, k) {
        return k == 1 ? 1 : k * ft(ft, k - 1);
    }));
})(10)

Fibonacci

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?

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);
    }));
};
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»