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

ブロックの引数の数から入れ子の回数がわかるので、nlambdaの引数nは別にわざわざ指定しなくてもいいことに気が付きました。
それはそれとして、Proc#arityのarityの語源って何なんでしょ? 他言語でも引数の数を表現するのにarityって使っているみたいなんだけど。

def nlambda(n = -1, xs = [], &f)
  n = f.arity if n < 0
  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 {|x      | x          }
K = nlambda {|x, y   | x          }
S = nlambda {|x, y, z| x[z][y[z]] }

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