F#(エフシャープ)はOCaml(Objective Caml)をベースにした,米Microsoftの関数型言語である。Visual Basic,C++,PHP,Javaなどの命令型言語(手続き型言語とほぼ同義)に慣れたプログラマにとって,関数型言語はかなりとっつきづらいものがある。

 実際,これまで関数型言語はごく特殊な人たちにしか使われてこなかった。その関数型言語の一種が,なんとVisual Studioの次期バージョンに標準搭載されるというのである。さっそく,Visual Studio 2010日本語ベータ1でF#プログラミングをしてみよう。

対話型で実行してもよいしコンパイルしてもよい

 リスト13が簡単なサンプルである。F#は対話型(インタラクティブ)に実行が可能である。VisualStudio 2010のメニューで「表示」→「その他のウィンドウ」→「F# Interactive」を実行し,F# Interactiveウィンドウに,リスト13(a)のコードを1行ずつ入力,実行したのが図24だ。1行の最後にコロンを二つ打ち込むこと,1行ごとにEnterキーを押すことに気を付けてほしい。

リスト13●F#の入門コード
図24●Visual Studio 2010 の「F# Interactive」ウィンドウでF#のコードを対話的に実行する

 リスト13(1)では,let文で式に名前を付けている。命令型言語だったら,おそらく「a」という変数(箱,入れ物)を左辺に記述して,その中に右辺の計算結果を代入するコーディングをするだろう。F#では,右辺の式に,左辺で示したラベル(名前,識別子)を付けるという考え方をする。これを束縛(バインディング)と呼ぶ。リスト13(2)ではaに8を加えたものをmとしている。図24を見ると,

val m : int = 32
と出力しており,加算が行われて,mが32になっている。

 F#ではプログラムを実行する方法がほかにもある。Visual Studio 2010のコマンドプロンプトを使うと,「fsi」というコマンドを打ち込むことでF#の対話型実行ができる(図25)。終了は「#quit;;」だ。Visual StudioでF#アプリケーションのプロジェクトを作ることも可能だ。実行は図26のように,コードのすべてを範囲指定して(Ctrl+Aキーを押すとよい),マウスで右クリック・メニューを呼び出して「Send To Interactive」を呼び出す。

図25●Visual Studio 2010のコマンドプロンプトでF#のコードを対話的に実行する
図26●Visual Studio 2010でF#アプリケーションのプロジェクトを作り,コードを入力。全選択して「Send To Interactive」で実行しよう

 コンパイルしてEXEファイルを作ることも可能だ。リスト13(a)のプログラムだと,EXEファイルで実行しても何も出力されないので,

printfn "%d" m;;
という行を付け加えた3行を,「fstest01.fs」という名前で保存し,コンパイルして,非対話型で実行したのが図27だ。

図27●F#のコードをコンパイルして実行する

F#では関数もデータである

 リスト13の(b)へ進んでみよう。(3)のlet文は,引数xの絶対値を返すabsoluteという関数を定義している。その次の2行が関数を実際に使った例で,(4)は2を返し,(5)は8を返す。F#では関数もデータであると考える。だから,このlet文は,「xを引数とする『ifx > 0 then x else -x』という関数」にabsoluteという名前を付ける,という意味の宣言になる。

 (c)は階乗計算の関数を書いた例だ。(6)ではlet recとしている。recはrecursionの略だ。こう書くことによって,factorialという関数の定義の中でfactorialという関数を使うことが可能になる。(7)は2×1で2を出力し,(8)は10×9×8×7×6×5×4×3×2×1で3628800を出力する。

リスト13●F#の入門コード(再掲)