F Sharp
出典: フリー百科事典『ウィキペディア(Wikipedia)』
| 本来の表記は「F#」です。この記事に付けられた題名は記事名の制約から不正確なものとなっています。 |
| F# | |
|---|---|
| パラダイム | 関数型、オブジェクト指向 |
| 開発者 | マイクロソフト |
| 最新リリース | 2.0 / 2010年8月 |
| 型付け | 強い静的型付け |
| 影響を受けた言語 | Objective Caml、ML、C#、Haskell |
| プラットフォーム | .NET |
| ライセンス | Apache License、Microsoft Public License (Ms-PL) |
| ウェブサイト | Microsoft F# Developer Center |
F#(エフ シャープ)はマイクロソフトが開発した .NET Framework 向けのマルチパラダイムプログラミング言語である。Visual Studio 2010 より開発言語として追加された。
目次 |
概要 [編集]
2002年からマイクロソフトリサーチのドン・サイム[1]らによって OCaml をベースに開発が始められた。
OCaml から多くの要素を引き継いだ関数型とオブジェクト指向のマルチパラダイムである。型安全であり、型推論の機能をもつ。ただし、オーバーロードをサポートしているため、OCaml のもつ型推論の完全性を失っている。C# や Visual Basic などの .NET Framework の言語と相互運用性があり、.NET クラスライブラリの利用・開発が可能であり、Windows Phone 7 のアプリケーション開発もサポートされている。
F# の開発環境は Visual Studio の製品に含まれているほか、無償で配布されている[2]。また、Monoでも動作するため、Mac OS X や Linux などでも F# プログラムの開発及び実行ができる。
OCaml 互換の標準ライブラリを備えており、F# と OCaml のどちらでもコンパイルできるコードを記述することも可能である。しかしクラスの構文などは F# と OCaml で異なっている。
構文 [編集]
OCaml と互換性のある冗語構文[3]と、Python のようなインデント(オフサイドルール)による軽量構文[4]の二種類の構文を利用できる。標準では軽量構文が有効になっている。
例 [編集]
Hello world [編集]
(* これはコメント *) (* Hello world プログラム *) printfn "Hello World!"
再帰による階乗のプログラム [編集]
let rec factorial n = match n with | 0 -> 1 | _ -> n * factorial (n - 1)
再帰関数の例 [編集]
(* int リストの要素を再帰的にプリントする *) let rec printList lst = match lst with | [] -> () | h :: t -> printf "%d\n" h printList t (* 上と同様だが任意の型の要素をプリントする *) let rec printList2 l = match l with | [] -> () | h :: t -> printfn "%A" h printList2 t (* match の代りに function 式を利用する *) let rec printList3 = function | [] -> () | h :: t -> printfn "%A" h printList3 t (* 高階関数を利用する *) let printlist4 lst = List.iter (printfn "%A") lst
(* フィボナッチ数列 *) let rec fib n = match n with | 0 | 1 -> n | _ -> fib (n - 1) + fib (n - 2) (* 遅延再帰シーケンス式によるフィボナッチ数列 *) let rec fibs = Seq.cache <| seq { yield! [1; 1] for x, y in Seq.zip fibs <| Seq.skip 1 fibs -> x + y } (* 遅延無限シーケンスによるフィボナッチ数列 *) let fibSeq = Seq.unfold (fun (a,b) -> Some(a+b, (b, a+b))) (1,1) (* 偶数のフィボナッチ数をプリントする *) [1 .. 10] |> List.map fib |> List.filter (fun n -> (n % 2) = 0) |> printList (* 同じことをシーケンス式を利用する *) [ for i in 1..10 do let r = fib i if r % 2 = 0 then yield r ] |> printList
Windows フォームを使用した例 [編集]
(* フォームの作成 *) open System.Windows.Forms let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#") (* フォーム テキストを決める *) let x = 3 + (4 * 5) do form.Text <- (if x = 23 then "Correct!" else "incorrect")
F# で書かれたソフトウェア [編集]
脚注 [編集]
関連項目 [編集]
外部リンク [編集]
- Microsoft Research - F#
- Try F#
- The F# Software Foundation
- Don Syme's WebLog on F# and Other Research Projects
|
||||||||||||||||||||