14:00本連載では、C#で「最低限」なんらかのコードを書いたことのあるプログラマーを対象に、関数型プログラミング言語「F#」について数回にわたり解説していきます。Representation(抽象的表現)について紹介します。2010製品版がとうとうリリースされました。F#に関しては、RCからの変更箇所詳細はMSから発表されていないことと、F#のバージョンはRC同様の2.0であることから、今回はバグの修正を中心としており、機能に関しては大きな変更はありません。2010(評価用日本語版)ダウンロードはこちらから今回の連載の動作確認はVS2010RTM英語版で行っています。Programming)とは何か、を一言で定義するのは容易ではありません。LOPの概念は抽象的で、またその技巧も大変幅が広く複雑だからです。Language)とは何かと言うことから理解する必要があります。DSLはある特定の目的(ドメイン)の解決に特化させたプログラミング言語のことです。これに対して、C言語やC#は汎用的なプログラミング言語に分類されます。Excelのセル内の数値は「A1」や「B3」などのように、Excel固有の表し方でシンプルに表すことができ、汎用的なプログラミング言語のようにデータ型などを心配することなく、そのまま「A1+B3」などのように式において使用できます。これは一種のDSLであると言えます。DSLには外部DSLと内部DSLの2種類があります。ホスト言語(汎用言語)とは異なる言語、例えばXMLファイルなどを使用する手法を外部DSLといい、一方、ホスト言語のサブセットで書かれるものを内部DSL(組み込み型DSLと呼ばれることもあります)と呼びます。その都度パーサなどを作成・用意しなくてはならない比較的学習に時間を要するある種の問題に対応するためにDSLなどを作成し、それを用いて特定のドメインの問題を解決しようとするのがLOPのプログラミング手法です。DSLは状況(特定の問題)に応じて都合よく作成される言語のため、当然その表現は、シンプルかつ分かりやすいものになります。一般的にはその都合の良さの代償として、関係者がその特定の言語をわざわざ学ばなくてはならない、また、誰かが言語を確立してコンパイラーを作成しなくてはならない、という欠点があります。F#のLOPの特徴は、このDSLを汎用言語のサブセットとしながらもベーシックな汎用言語にない特別な機能を与えることで、DSLの短所をカバーしながらドメイン固有の問題を表現・解決できるところです。繰り返しますが、F#のLOPは大変概念化しにくいものなので、詳細は後に例をあげながら紹介したいと思います。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。