Y.js

Mozilla LXR の中に Javascript で記述した Y コンビネータを発見。
mozilla/js/src/Y.js
リンク先のコードは関数名を使っており Y コンビネータらしく見えないので、それっぽく書き直してみました。

(function(f){
  return
    (function(p){
      return f(function(arg){ return p(p)(arg); })
    })(function(p){
      return f(function(arg){ return p(p)(arg); })
    });
})(function(f){
  return function(n){ return (n <= 1) ? 1 : n * f(n - 1); };
})(5);

それにしても、いちいち return を書かにゃならんのがなんとかならないものかと……。