昨日のコードで
id:NyaRuRuさんに指摘されたRand()の件、これが参照透明な言語とそうじゃない言語の違いってことなんだろうな、きっと。
Qsort()の中でsourceを一度しか評価しなければ、うまくいきますね。つまり、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