Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。Frameworkポスト本連載では、C#で「最低限」なんらかのコードを書いたことのあるプログラマーを対象に、関数型プログラミング言語「F#」について数回にわたり解説していきます。今回は言語指向プログラミングの第2弾として、外部DSLにて書かれた具体的表現を読み込んでF#に変換する技術を解説します。3まとめはじめに言語指向プログラミングの第2弾として、今回は外部DSLにて書かれた具体的表現を読み込んでF#に変換する技術について解説します。アクティブパターンアクティブパターンとはある値に複数の表現方法(フォーム)を与えることで、XMLなどの型付けされていない異種混在なデータに対しても、パターンマッチを可能にする技術です。構文中のバナナクリップ(||)に囲まれた各部分をアクティブパターン識別子と呼びます。パターンマッチなどでアクティブパターンを使用する場合には、このアクティブパターン識別子経由で呼び出します。アクティブパターン識別子は、アクティブパターンに引数として渡される入力データ用パーティションに対する名前のようなものです。式--------------------------------------------パターンマッチにおいて、パターンが識別子で2文字以上で大文字で始まる場合は(※1)、コンパイラがアクティブパターンなどのパターン識別子との照合を試みます。一致する識別子が見つからない場合は次のパターンが入力値(引数)と比較されます。比較において一致が発見された場合、アクティブパターンの式部分に記述された該当する変換作業が行われ、その結果が戻され、それからパターンマッチが行われます。アクティブパターンの各アクティブパターン識別子を関数のように機能させ、その結果をパターンマッチングの一部として使用できます。これは言い方を変えれば、ある値をアクティブパターン(関数)で変換してからパターンマッチングを行う補助関数とも言えるでしょう。アクティブパターンにはシングルケースとマルチケースの2種類があります。シングルケースとは、アクティブパターン識別子が1つしかないもので、引数として渡された入力データをあるたった1つの方法で変換します。マルチケースとは、アクティブパターン識別子が複数あり、入力される値によって変換パターンが異なります。いずれの場合にもパターンマッチからアクティブパターンを呼んで使用する際には、ちょうど関数を呼ぶようにアクティブパターンを呼び、アクティブパターンの式の部分に記述される変換作業を行います。unit上記リストはシングルケースアクティブパターンの例です。パターンマッチのパターンとして定義されたTestRGBは、シングルケースアクティブパターンとして、唯一の式(変換作業)を実行し、System.Drawing.Color型の入力データを引数としてシングルケースアクティブパターン(※2)に渡し、処理をしてからパターンマッチ(※1)を行っています。引数nを渡されたシングルケースアクティブパターンTestRGBは、いかなるSystem.Drawing.Color型の引数を受けた場合にも、その(n.R、n.G、n.B)の組を返します。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。