F Sharp

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
本来の表記は「F#」です。この記事に付けられた題名は記事名の制約から不正確なものとなっています。
F#
パラダイム 関数型オブジェクト指向
開発者 マイクロソフト
最新リリース 3.1.1 / 2014年1月[1]
型付け 強い静的型付け
影響を受けた言語 Objective CamlMLC#Haskell
プラットフォーム .NET
ライセンス Apache LicenseMicrosoft Public License (Ms-PL)
ウェブサイト Microsoft F# Developer Center

F#(エフ シャープ)はマイクロソフトが開発した .NET Framework 向けのマルチパラダイムプログラミング言語である。Visual Studio 2010 より開発言語として追加された。

概要[編集]

2002年からマイクロソフトリサーチドン・サイム[2]らによって OCaml をベースに開発が始められた。

OCaml から多くの要素を引き継いだ関数型オブジェクト指向マルチパラダイムである。型安全であり、型推論の機能をもつ。ただし、オーバーロードをサポートしているため、OCaml のもつ型推論の完全性を失っている。C#Visual Basic などの .NET Framework の言語と相互運用性があり、.NET クラスライブラリの利用・開発が可能であり、Windows Phone 7 のアプリケーション開発もサポートされている。

F# の開発環境は Visual Studio の製品に含まれているほか、無償で配布されている[3]。また、Monoでも動作するため、Mac OS XLinux などでも F# プログラムの開発及び実行ができる。

OCaml 互換の標準ライブラリを備えており、F#OCaml のどちらでもコンパイルできるコードを記述することも可能である。しかしクラスの構文などは F#OCaml で異なっている。

構文[編集]

OCaml と互換性のある冗語構文[4]と、Python のようなインデント(オフサイドルール)による軽量構文[5]の二種類の構文を利用できる。標準では軽量構文が有効になっている。

[編集]

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# で書かれたソフトウェア[編集]

脚注[編集]

  1. ^ http://visualstudiogallery.msdn.microsoft.com/4019ccb1-7adf-4ba0-b9b7-3d4149a4fa2a
  2. ^ : Don Syme
  3. ^ CTP、: community technology preview
  4. ^ : verbose syntax
  5. ^ : lightweight syntax

関連項目[編集]

外部リンク[編集]