標準ライブラリに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

と、環境によって名前がバラバラなんだそうだ。