SKIコンビネータでSKK = I(Ruby版)そのさん

関数適用の演算子をProcクラスに追加してみました。とりあえずこんなところにしておこうと思います。

def nlambda(n, xs = [], &f)
  if n <= 0
    f[*xs]
  else
    lambda {|x| nlambda(n - 1, xs + [x], &f) }
  end
end

class Proc
  def *(x)
    self[x]
  end
end

I = nlambda(1) {|x      | x          }
K = nlambda(2) {|x, y   | x          }
S = nlambda(3) {|x, y, z| x[z][y[z]] }

p S * K * K * 100 == I * 100 # => true