標準ライブラリにFold相当のメソッドがあった
昨日のエントリ「可変個の集合から、直積の集合を作る - チキン煮込みチーズミックス4辛」で、Foldを自作したけど、これと同じ働きをするメソッドが標準であるみたいだ。Enumerable.Aggregateって拡張メソッドがそれ。ってことで、該当箇所をこっちで書き換えると次のようになる。ほとんど変わらないけど。
sets.Aggregate( Enumerable.Repeat(Enumerable.Empty<T>(), 1), (prod, list) => from x in prod from y in list select x.Concat(Enumerable.Repeat(y, 1)));
この手の手続きは
- reduce
- fold
- aggregate
- accumulate
- inject
と、環境によって名前がバラバラなんだそうだ。