2017年4月22日土曜日

yコンビネータ

関数型プログラミングの基礎に
コラムとしてYコンビネータのことがでていた。

わかったような、わからないような。。。
なぜ明示的に再帰を使わずに、再帰ができるかの証明がWikipediaに出ていた。

https://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E7%82%B9%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF

他のサイトからscriptをコピペして試してみた
<script>
function Y(f) {
  return (function(g) {
    return function(m) {
      return f(g(g))(m);
    };
  })(function(g) {
    return function(m) {
      return f(g(g))(m);
    };
  })
}

var factorial = Y((fact) => {
 return (n) => {
  if (n==0) {
   return 1;
   }else {
    return n*fact(n-1);
    }
    };
    });  
    alert(factorial(4));
</script>

0 件のコメント:

コメントを投稿