« 地獄少女、復活。 | メイン | 風の聖痕 Ignition 5 幸せなイチニチ »

Lambda & Iterator

Nyaruru の日記で面白そうなことが書かれています。『C# 3.0 と while(true) と Iterator』 です。俎上に上っているのはテキストファイルから複数行のテキストを一行づつ読み取る処理です。へぼろっぱぁの『少数派なのはわかっています』に反応してのものなんでしょうけど。元々のは while(継続条件) と for と、while(true) でループ内に脱出条件を仕込むパターンですが。当然ながら Nyaruru さんのは C# の yield を使ったものです。

yield というのは反復子を簡単に実装するためのキーワードで IEnumerable インタフェースの実装内で使えます。yield return は WisdomSoft の『yield キーワード』に見られるようにかなり独特のものです。列挙を処理する場合、手続き言語の哲学なら内部でカプセル化された動的な配列をバッファに返された値を保存し、そこからオブジェクトを生成するという形になろうかと思います。ところが C# のそれは内部でコルーチンになっているんですね。コルーチンというのはいったん処理を中断した後、続きから処理を再開できるものです。一般的なサブルーチンでは return で戻してしまえば処理は再開されません。ところがコルーチン化されているのでいったん値を返してもそこからまた処理を再開できるわけです。コルーチンを実装した言語は Wikipedia によれば Modula-2、Simula、Icon、Lua、C# です。この中で実用としてある程度大量に用いられている言語としては Lua と C# が残るでしょう。

そういう意味では、C# は恐らく、手続き言語・オブジェクト指向言語というくくりに関わらず便利そうであればどんどん取り込んでいる節があります。そして、その方向性は恐らく、実用志向です。実際、件のC# 3.0~のアーティクルでも最終的にはラムダ式などの LINQ のフィーチャーをふんだんに使った物になっています。ラムダ式は C# 3.0 で実装された特徴的な機能の一つです。例えばこういうものです。

x=>x*x

この場合だと、x を与えて x の2乗を返す式の参照が帰ることになります。この参照は他の関数に値として与えることができます。ただ、普通の匿名関数と違って、式木として扱えます。匿名関数の場合、内部的には IL にコンパイルされてしまうのでそういった柔軟性は期待できません。式木にできればこの辺は中でいろいろ使えます。この辺は『関数言語由来の新機能』が面白いかと。

このエントリーをはてなブックマークに追加 Save This Page to del.icio.us このエントリーをlivedoorクリップに追加 このエントリーをニフティクリップに追加 このエントリーをBuzzurlに追加このエントリーをBuzzurlに追加 このエントリーをFC2ブックマークへ追加 このエントリーをnewsingへ追加 このエントリーをYahoo!ブックマークに追加

トラックバック

このエントリーのトラックバックURL:
http://www.cworld2000.com/cgi-bin/mt/mt-tb.cgi/384

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年01月11日 13:51に投稿されたエントリーのページです。

ひとつ前の投稿は「地獄少女、復活。」です。

次の投稿は「風の聖痕 Ignition 5 幸せなイチニチ」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

検索

この Weblog について

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type 3.35