SKIコンビネータでSKK = I(Ruby版)そのに
lambdaが入れ子になっているところをまとめてみました。だいぶ読み易くなりました。
def nlambda(n, xs = [], &f) if n <= 0 f[*xs] else lambda {|x| nlambda(n - 1, xs + [x], &f) } 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