勉強 church数とか
チャーチ数
0: λ f x. x
1: λ f x. f x
2: λ f x. f (f x)
3: λ f x. f (f (f x))
...
簡単にいうと,fを適用した回数で自然数を表現していると.
演算
SUCC := λn f x. f (n f x)
チャーチ数を受け取って次を計算する(チャーチ数nを受けてチャーチ数n+1を返す)
PLUS := λm n f x. m f (n f x)
で,これらをjavascriptに直していく
(function(f){ return function(x){ return x; } })
1
(function(f){ return function(x){ return f(x); } })
後は順次
SUCC
(function(n){ return function(f){ return function(x){ return f(n(f)(x)); } } })
で,PLUSがうまくいかない.頭が混乱してきた
PLUS := λm n f x. m f (n f x)
(function(m){ return function(n){ return function(f){ return function(x){ return m(n(f))(x); } } } })
こうなるような気がするんだけど動かない・・・
解決しないと・・・
PLUS
例えば2+3=5が欲しいときは
(functoin(m){ return function(n){ return function(f){ return function(x){ return m(n(f))(x); } } } }) (function(f){ // m = 2 return function(x){ return f(f(x)); } }) (function(f){ // n = 3 return function(x){ return f(f(f(x))); } }) (function(x){ // fはxを受けてx+1を返す関数 return x+1; }) (3) // xとして3を与える
つまり,n+m回fを行うので最終的に8が返ってくれば正解