ストリーム

id:siokoshou:20061202あたりの続きっぽいエントリー。
こないだWikipediaでコルーチンを見つけたときに、もしかしてと思ってSICPこと「計算機プログラムの構造と解釈」を見てみると、パイプラインパターンって呼んでたやつが「3.5ストリーム」としてしっかり載ってました。この本、ひげぽんさんに影響されて買ったはいいけど、やっぱり積読になってたのでしたw
各ストリームごとにきっちり分離して部品化できるから、状態管理が楽だよってことみたい。様々な場面で検討に値するアーキテクチャかもしれない。著名な教科書に載ってるような由緒正しいものだったとは。

数学っぽいことやってもおもしろくないんで、またテキスト処理。普段、テキスト処理はLLでやるけどねw

あるログファイルから特定の文字列を含まない行を取り出してます。LINQ風です。Selectの実装は載せてないけどLINQのSequence.csのWhere()と一緒です。数行で書けるんで、頭の体操にどうぞ。

public static void Main( string[] args )
{
	try
	{
		foreach ( string str in
			Functional.Select( delegate( string s ) { return !s.Contains( "Opera" ); },
			Functional.Select( delegate( string s ) { return !s.Contains( "Mozilla" ); },
			Functional.TextFileReader( args ) ) ) )
		{
			Console.WriteLine( str );
		}
	}
	catch ( Exception e )
	{
		Console.WriteLine( e.Message );
	}
	Console.ReadLine();
}

この例ではテキストファイルから読んでるけど、これをコレクションクラスに変えたり、どっかと通信してその中身なんてことになっても、この大枠のアーキテクチャには影響がないかもしれないですね。本当にないかな?w もうちょっと考えてみます。