map/filter/foldr/foldlを例にした説明。 このうち、foldr以外はLINQにもある。mapはSelect、filterはWhere、foldlはAggregate。だから大体問題ないんだけど、foldrを理解するのにちょっと時間がかかった。 教科書にはまだ書いてなかったんだけど、どうやらfoldrは無限リストを扱えるようなのだ。 まじ?どうやって?なんでfoldlではだめなの?
ということでいろいろ調べながら、C#でfoldrを実装してみた。 http://d.hatena.ne.jp/matarillo/20110507/p1
これで少し納得がいった。foldrで無限リストを扱うには遅延評価が必要だと。
では教科書に戻る。