昨日のコードで

id:NyaRuRuさんに指摘されたRand()の件、これが参照透明な言語とそうじゃない言語の違いってことなんだろうな、きっと。
Qsort()の中でsourceを一度しか評価しなければ、うまくいきますね。つまり、IEnumerableからIEnumeratorを一度だけ取って、それを使うっと。IEnumerableを複数回評価するのはご法度ってことかな。落とし穴ですね。
コードは手続きべたべたなおもしろくないものになってしまったので、省略。head(先頭の要素)とtail(2つ目以降の要素すべて、つまり先頭を取った後のIEnumerator)を返すメソッドを作れば…とも思ったけど、普通再帰書かないからイイヤとか思ったり。
NyaRuRuさんのLINQによるソートはおもしろいですね。実用には source.ToArray().Sort() (追記:Arrayはインスタンス.Sortじゃなかった、面倒なんだった、訂正) Array.Sort( source.ToArray() ) と書けばいいのかな。とか言うと身も蓋もないわけですがw

id:moriyoshiさんとのやりとりで、この日記ではパイプラインパターンの説明をしていなかったことに今さら気づいてしまった。
↓ここに説明があります。
http://www.theserverside.net/tt/articles/showarticle.tss?id=IteratorsWithC2

C#3.0になったらLINQとしか呼ばれない気もしますが(^^; 根っこにはこれがあります。(旧称)DLINQはSQLを組み立てて投げるものらしいので、パイプラインは根っこになさそう。

ついでに101 LINQ Samplesもぺたり。
http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx