ジャバスクリプトのYコンビネータ実現

劉鵬を見るためにいくつかの研究を行っている、記事が前にYコンビネータを理解していなかった時間ではありません、これは知ってもらうように見えました。次のようにアイデアがあります

第1節


私たちは、再帰関数Fを書きたい(X):Fは、一連の操作(X-1)の後に呼び出し、
Fの完了は、我々は唯一のFを構築し、存在していない前に、fをパラメータとして自分自身を実現するための呼び出しに渡される文ではなくF
に書きますF(fは、X):一連の操作Fを呼び出した後に(F、X-1)
私たちは、この機能を抽出した場合、ここではf(fは、その機能が繰り返され、それがなどFに書き込むことがわかります一価の
F(f)は(x)のように、Fを再定義:一連の動作(X-1)の後に(F)Fを呼び出す
F、F、コントラスト上で定義される(X):一連の動作の後にX-1(Fを呼び出します)
ここでは、限り、F = F(f)は、Fの書き込みの前に書き出すよう

f = function(self){return function(n){if(n==1) return 1;else return n*self(self)(n-1)}}
F = f(f)
console.log(F(5))


Fを書くことが定義されているF(F)を観察し、これはまた、それを書くためにFを交換する場合は?

 

第2節


クリア、ダウン書き換え
ので、我々は、Fの前をモデルに、Fが存在しているふりをf_gen(F)(x)を書いた:操作後のコールF(X-1)のシリーズを
、我々はf_gen(F)を見つけ= F
次に、我々はFを書きます。我々は、Fのような性質、Fを有する(F)= F、そうf_gen(F(F))= F
場合にそのように定義され、F(F)(X):一連の動作の後(F(F))(f_gen呼び出しますx)の
発見に100の後、F(F)(100) = f_gen(F(F))、(100)= 100 * f_gen(F(F))(99)、 両方のF = f_gen(F(F) ) = F(f)は、Fが出て書いた
ここでは、私たち人間の肉は、Yコンビネータを実現し、役割はf_genでFを生成することで、本質を行い、これはパラメータを渡す時に書かれるべきf_genを定義することであると、(f)書かfは自分自身を呼び出しますFを起動し、その後F(F)は、Fの定義への転送の一部です。

f_gen = function(Fact){return function(n){if(n==1) return 1;else return n*Fact(n-1)}}
f = function(self){return function(n){return f_gen(self(self))(n)}}
F = f(f)
console.log(F(5))

明確な以前に十分に良いされ、明確な純粋に余分の内容の後に、少し脳を燃やします。

 

第3節


Yは匿名再帰関数を書くことができることを意味コンビネータ。
また、書くことができ、以前のプログラムをクリア

console.log(function(f){return f(f)}(function(self){return function(n){if(n==1) return 1;else return n*self(self)(n-1)})(6))

、Yが続く限り、ライトY、コードに人間の肉の一部として

console.log(function(f){return f(f)}(function(f_gen){return function(self){return function(n){return f_gen(self(self))(n)}}}(function(Fact){return function(n){if(n==1) return 1;else return n*Fact(n-1)}}))(7))

ここでは、匿名の再帰関数を記述するために2つのメソッドを使用することができます

 

終わり 

 

 引数の種類(F)をFを識別することができる= F固定点F、すなわちY(F)= F Y演算子である、この評価は、Yは、我々は意図的に構築することであるため、F(F)がオンになっていない、少し過大評価でありますFは、演算を行い、F(F)は、(x)は、F(F、X)の文言は、単に自分自身を参照するために、それを強制的にロードされます。Yは本当にF(X)= X * xの固定点ではないが解決されません。

 

 

ます。https://my.oschina.net/zbaigao/blog/3059015で再現

おすすめ

転載: blog.csdn.net/weixin_34114823/article/details/91926307