From: mhm26@... (matt) Date: 2003-12-27T12:01:50+09:00 Subject: Curry I searched google groups and couldn't find a decent currying implementation, so I took a few minutes and wrote one. Here it is, for anyone who wants it. Any comments (ie if I messed up something I didn't realize) are welcome :-) class Proc alias oldcall call def curry(&callTest) @curry, @args, @callTest = true, [], callTest self end def ncurry(n) curry {|*args| args.length > n} end def call(*args) return oldcall(*args) if @curry.nil? res, me, pass = @args + args, self, @callTest return oldcall(*res) if @callTest.call(self, *res) # the me is just to make things read easier... p = Proc.new {|*args| me.send(:oldcall, *args)} p.curry(&pass) p.instance_eval {@args = res} p end def[](*args) self.call(*args) end end