このところSKIコンビネータで遊んでいたのですが、そういえばSKIコンビネータをベースとしたunlambdaって関数型言語があったなぁ思い出しました。ということでちょー簡略版のunlambdaを実装してみました。組込み関数は.x、r、i、k、sのみ実装しています。 require 'stringio' 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 FUNC_TBL = Hash.new {|h, c| c.chr.to_sym } FUNC_TBL[?.] = nlambda {|x, y | putc x; y } FUNC_TBL[?r] = nlambda {|x | puts;