読者です 読者をやめる 読者になる 読者になる

勉強 church数とか

プログラム lambda

チャーチ数

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が返ってくれば正解