2007-04-01から1ヶ月間の記事一覧

Anonymous Recursion in C#

C#

濃すぎて理解しきれないんだけどおもしろそうなネタを置いときますね。 C# 3.0でAnonymous Recursion in C# ↑をメモ化 (5/27追記)Recursive lambda expressions (ついていけません…) 関連ネタ anonymous delegateで再帰 関数の不動点 Y-combinator #関連ネ…

System.L…あれ?

Orcasβ1が出たんで、入れたばかりの3月版を消してさっそく導入。3.0のことをあーだこーだ書いてる割に聞きかじりの知識ばかりなんで、きちんとドキュメント読むかぁと思って。で、読むかっていうと、そうでもなくてさっそくLINQいじり (^^; 2.0から持ってき…

LINQ脳…

C#

「The .NET Standard Query Operators」(May 2006) (注:Word文書!)の3ページに以下のサンプルコードが載っていた。 IEnumerable<int> indices = products. Select((product, index) => new { product, index }). Where(x => x.product.UnitPrice >= 10). Select(</int>…

LINQの得手不得手?

C#

シーケンス中の値が0の要素のインデックス番号をすべて求めるコード。普通の書き方。 int[] numbers = { 9, 0, 7, 6, 0, 4, 0, 2, 1 }; List<int> blankIndeces = new List<int>(); int count = 0; foreach ( int value in numbers ) { if ( value == 0 ) blankIndeces</int></int>…

LINQ IndexOf

C#

やっぱりLINQにIndexOfはいらないかも。簡単に書けた。LINQ版IndexOf int[] numbers = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; int index = numbers.TakeWhile( n => n != 7 ).Count(); まだ組み合わせの発想が乏しいようで。

汎用IndexOf

C#

IEnumerable汎用のIndexOfがないので書いた。 どこにないかというと「The .NET Standard Query Operators May 2006」やSequence.csに。なんでないんだ、あり得ないでしょ>MSさん 追加すべきと報告したいけど、どこに言えばいいんだろ。見落としだったらはず…

C#3.0の脅威

C#

C#3.0の興味深い記事とコードを2つ。 Fast Switching with LINQ stringをキーとするハッシュテーブルを、C#3.0のLINQ Expressionでランタイムコンパイルして900%高速化してみせる興味深い記事。・・・だったはずが、コメント欄に投稿されたC++のコードのほうが…

マルチキャストデリゲートのそれぞれの戻り値を得る方法

C#

チェーンになったデリゲートを普通に実行すると、最後の戻り値しか取れません。でも、もちろん、それぞれの戻り値を得ることもできます。C#を学び始めたばかりのころ、このやり方がわからなくて悔しかった。なのでメモしとく。リッチャー本で知った技。 サン…

Pipes and Filters

C#

パイプラインパターンと呼んできたIEnumerableを使ったアーキテクチャに別名発見。「Pipes and Filters」だそうで。自分で読んでない本を紹介するのは心苦しいんだけど、「Pattern-Oriented Software Architecture」通称POSA本に載ってるらしい。邦訳は「ソ…

遥かなるOrcas

C#

Orcas March 2007 CTPを試してみました。使ったのは↓これ。でかいのでディスクを空けるのが大変でした…。 http://www.microsoft.com/downloads/details.aspx?familyid=281fcb3d-5e79-4126-b4c0-8db6332de26e&displaylang=en先日書いたTextFileReaderでシンプ…

useful Iterator

C#

public static IEnumerable<string> TextFileReader( string fileName ) { using ( StreamReader sr = new StreamReader( fileName ) ) { string line; while ( ( line = sr.ReadLine() ) != null ) yield return line; } } public static IEnumerable<string> TextFileReade</string></string>…

C#3.0はJavaScript?

C#

「id:amachang:20060309 C#3.0 って JavaScript 似てるね」を読んで、とても同意。 本当にコンパイル不要言語になってくれたら、列挙できるものなら何にでもその場でSQLを投げれるスゴ言語になっていいな。レガシーなシステムが吐き出すテキストの山に、カタ…

Qsort( Rand().Take(10) ) で何が起こったのか?

C#

新年度なので模様替えしてみました。さて、昨日のQsortにRandを食わせるとどうなるか?軽く見てみます。 TakeをLINQのSequence.csを、RandはNyaRuRuさんのものをちょっといじったものを用意したので、昨日のコードとくっつけると実行できます。昨日のコード…

昨日のコードで

C#

id:NyaRuRuさんに指摘されたRand()の件、これが参照透明な言語とそうじゃない言語の違いってことなんだろうな、きっと。 Qsort()の中でsourceを一度しか評価しなければ、うまくいきますね。つまり、IEnumerableからIEnumeratorを一度だけ取って、それを使う…

パイプラインパターンでクイックソート

C#

Haskellと言えば、数学の定義のようなクイックソートが有名です。ふつケル(ふつうのHaskellプログラミング)から引用させていただきます。 qsort [] = [] qsort (p:xs) = qsort lt ++ [p] ++ qsort gteq where lt = [x | x <- xs, x < p] gteq = [x | x <- xs…