(途切れていた部分を修正しました。) ちょっと拡張してwith_indexとか作ってみる。 以下をさらに改良したものが「ブロックの合成(その3:再帰編)」にあります。 module BlockComposition def <<(other) Proc.new->(*argv,&block){ self.call(*argv)->(*argv2){ other.call(*argv2, &block) } } end def +(arg) Proc.new->(*argv,&block){ self.call(arg,*argv,&block) } end def /(filter) Proc.new->(*argv,&block){ self.call(*(filter.call(*argv)), &block) } end def >>(other) Proc.new->(*argv,