Listモナド(2)
2つの関数を繋げるだけなら,concatMapを作れば済むよな.もしかしたら同等のメソッドが標準であったりして….
class Array def concat_map( &block ); map(&block).inject([]){|c,a| c+a }; end end def expandPattern( str) expandCharClass(str).concat_map {|x| expandAltWords(x) } end p expandPattern("img[012].{png,jpg}") #=> ["img0.png", "img0.jpg", "img1.png", "img1.jpg", "img2.png", "img2.jpg"]
expand〜はid:iken0:20071226#p3で定義.
言語の支援が無い状態での実用性はともかく,考え方としては面白い.