C#

LINQ is Monads. リンクはモナド

nsharp さんに教えてもらったビデオを見てみました。ごちゃごちゃしたメモだけどもう眠いのでそのまま書き残しておきます。http://channel9.msdn.com/Showpost.aspx?postid=358968「LINQなんてのは、実装は適用連鎖ですが、根底にある発想は関数合成の方だっ…

類似文字列を求める処理を改良

id:siokoshou:20080324 の類似文字列を求める処理をちょっと改良。かなり使えるかも。一文字も同じ文字がなければ捨てるようにしてみました。編集距離が比較する両方の文字列の長さの合計以上であれば、それは完全に文字列を置き換えたということなので、つ…

類似文字列を求める処理

類似文字列を求める処理を書いてみました。文字列を与えると、候補文字列の配列中から近いもの順に返してくる関数です。あいまい検索などに応用できます。 書いてみましたと言っても、以前書いた Diff クラスの使い方の一例だったりします。これ書いてて思い…

user.config ファイルを探す : または実用的な LINQ サンプル

C#

クライアントで動く .NET アプリのアプリケーション設定で、ユーザースコープなデータを定義すると user.config ファイルに記録されます。この user.config ファイルを探して列挙するコードを書きました。id:siokoshou:20071227#p1 のファイル列挙のサンプル…

コレクション初期化子と ICollection

C#

おもしろい記事を見つけて読みふけってしまったので、おもしろいとこだけぎゅぎゅっと抜粋。 via http://blogs.msdn.com/madst/archive/2006/10/10/What-is-a-collection_3F00_.aspxコレクション初期化子の設計話。なんで「IEnumerable + Add メソッド」なん…

式木の ==, Equals

C#

Expression<Func<int, int>> expr = x => x + 1; Expression<Func<int, int>> expr2 = x => x + 1; Console.WriteLine( expr == expr2 ); // false Console.WriteLine( expr.Equals( expr2 ) ); // false Console.WriteLine( expr.ToString() == expr2.ToString() ); // true なるほどねー(</func<int,></func<int,>…

デリゲートと式木の文字列表現

C#

ふと思いついて試してみました。 using System; using System.Linq.Expressions; class Program { static void Main() { // コンパイルエラー : 演算子 '.' を 'ラムダ式' 型の // オペランドに適用することはできません。 //Console.WriteLine( ( x => x + …

もっとオブジェクト初期化子

C#

昨日、nsharp さんにコメントで教えてもらった、 > initializerはクラスのフィールド宣言部でも使えることに最近気づいたり。 が、使ってみたらとても印象的だったのでちょっと長めのコードを載せてみます。デザイナで生成したコードを切り貼りして作った恣…

オブジェクト初期化子とコレクション初期化子

C#

なんだか LINQ to Object を使っていて、従来はごちゃごちゃした手続きだったものが、きれいな一つの写像を表現する式になったりするなぁと不思議に思ってたんですが、縁の下の力持ちが誰なのかわかりました。オブジェクト初期化子とコレクション初期化子が …

もう一つの Enum

C#

id:siokoshou:20080127:p2 の菊池さんのコメントを受けて、速度を改善した Enum を考えてみたんですが、これでいいような気がしました。 public static class Enum<T> where T : struct { private readonly static T[] values; private readonly static string[</t>…

Enum クラス

C#

id:siokoshou:20080124 に続いて再び enum ネタ。偶然すばらしいものを発見してしまったので。ネタ元 : http://devlicious.com/blogs/christopher_bennage/archive/2007/09/13/my-new-little-friend-enum-lt-t-gt.aspxこないだは enum の具体的な実装、例え…

次期 C# の新機能 Dynamic Lookup

C#

http://blogs.msdn.com/charlie/archive/2008/01/25/future-focus.aspx一言で言うと late binding。動的言語と COM とリフレクションを呼ぶのが簡単になるそうな。呼ぶ側から見るとこれらが同じ問題を抱えてたという目の付け所がおもしろい。

配列やコレクションやIEnumerableなどの汎用 IsNullOrEmpty

C#

id:siokoshou:20071208 の LINQ の限定子に重要なもの一つ追加。 Any() ってシーケンスに要素が含まれているかどうかどうかチェックする演算子でした。 Console.WriteLine( new int[] {}.Any() ); // false Console.WriteLine( new int[] { 1 }.Any() ); // …

Enum と拡張メソッド <3

C#

Enum と拡張メソッドって相性がいいですね。MSDN ライブラリでも取り上げられてますけど。enum MyEnum { A, B } と定義した enum を文字列化するときに日本語にしたいことがよくあって、static な関数を書いてたけど、拡張メソッドでちょっとだけきれいにな…

more Dynamic LINQ

C#

今日、東京に来たらしい ScottGu さんの Dynamic LINQ に対抗してみました。動的に LINQ クエリーを組み立てる例はあちこちでたくさんの人がそれぞれ違う方法でやってますが(^^;、末席に加わります。動的といっても Where に渡す条件を式木で組み立てて渡す…

脱線しすぎた

C#

イベントベースの非同期パターンってどうやって元のスレッドで完了通知を実行してるんだろ? ↓ Control.BeginInvoke もどうやってるんだろ? ↓ WinForm なら、ウィンドウにメッセージ投げればできるのかも ↓ これって .NET 以前でも同じことだよなぁ ↓ Advan…

object と呼ぶのは詭弁のような気がしてきた

C#

↓これ、最近書いたクラスなんですが、このインスタンスを object モノ と呼ぶのは無理があるよね。 using System.Collections.Generic; using System.IO; namespace TMR.Vanapedia.Util { /// <summary>FileInfoをファイル名で比較するクラス</summary> public class FileInfoNa…

LINQ to Object のイディオム その3 : シーケンス生成

C#

「標準クエリ演算子は、"シーケンス" を操作します。ある型 T に対してインターフェイス IEnumerable を実装するオブジェクトはすべて、その型のシーケンスと見なされます。」.NET 標準クエリ演算子より引用。 シーケンスの「生成演算子」あたりがお題。 冒…

訳語

C#

「式ツリー」って訳がねぇ。ど〜もねぇ。ルー大柴っぽくってwww 二分木、構文木とか定着してるから式木でいいと思うんだけど。

配列の共変性はちょっと壊れてる

C#

元ネタ http://blogs.msdn.com/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array-covariance.aspx 配列の共変性はちょっと壊れてるというお話。試してみました。 このコードは正常に実行できるでしょうか?コンパイルエラ…

yield 再帰

C#

Composit パターンを使った木構造にイテレータを書こうとして、ふと yield で再帰ってどうやるんだ?とちょっと考え込んでしまったのでメモ。わかってしまえば、あーこれ再帰だよねぇと納得ですが、パッと見、再帰に見えない罠。 せっかくなのでファイル/デ…

宣言型とか XML とかだらだらと

C#

ふと、XmlSerializer で XML の読み書きするのって宣言型プログラミングだよね、とか書いてみたりして。XmlElement 属性を使って、XML 要素名を .NET のクラス名にマッピングしたりだとか、そういうあたりが。属性は .NET 登場時から宣言型プログラミングっ…

Select は?

C#

http://msdn2.microsoft.com/en-us/library/ckzcawb8(VS.90).aspxSelect() と SelectMany() はどこ?

LINQ to Object のイディオム その2 : 集計演算子, 要素演算子, 限定子

C#

ちょっといない隙に PLINQ/TPL や Volta や International Pack とかw VS2008 が出たばっかりなのに、なんなんだろう(^^; 遠い未来の夢と思ってたライブラリが急に目の前にポンと出てきて、なんだか戸惑ってしまってます。で、どれで遊ぶか迷った末に決めか…

りんくあそび

C#

LINQ の練習に WMI ネタとフィボナッチネタのバリエーションをいろいろ書いて試してますが、インテリセンスがついてくるのがスゴイですね。ときどきあるんですが、文法は正しいのに表示しなくなったら、一度ビルドすればまた表示してくれるようになります。 …

LINQ でフィボナッチ (危険)

C#

動いちゃったのでさらします。真似しちゃダメっぽいです。Max を大きくすると大変なことになります。 どう動いているのだろ(^^; 頭がついていきません…w using System; using System.Collections.Generic; using System.Linq; class Program { private cons…

LINQ で WMI その3

C#

id:siokoshou:20071124 のクエリーを少しだけスッキリさせてみた。 Func<object, Dictionary<int, string>, string> map = ( o, d ) => d == null ? o.ToString() : d[ ToInt( o ) ]; var query = from ManagementObject mo in ( new ManagementClass( "Win32_CacheMemory" ) ).GetInstances(</object,>…

LINQ パズル

C#

http://www.infoq.com/news/2007/11/Functional-CSharp int[] b = Enumerable.Range( 1, 20 ).ToArray();Correct? using System; using System.Linq; class P { static void Main() { int[] a = new int[ 20 ]; for ( int x = 0; x < a.Length; x++ ) a[ x ]…

LINQ to Object のイディオム その1 : Cast() と OfType()

C#

昨日の LINQ to Object コードが読めなくなる前に(^^; メモを少し書き散らしておきます。 IEnumerable を LINQ to Object で扱うには Cast() か OfType() で IEnumerable に変換する。古くからある非ジェネリクスなコレクションを LINQ で扱うには変換必須。…

LINQ to Object の資料

C#

LINQ だけで本が何冊も出てくると予想してますが、早く日本語の良い本が一冊欲しいなぁ。ITマスコミが LINQ の記事をあまり書かないのは、LINQ が何なんなのか理解されていないからっぽいですね。某所のクイズを見てそれ正解じゃないからとか思ったり。LINQ …