F Sharp
F# | |
---|---|
パラダイム | 関数型、オブジェクト指向 |
登場時期 | 2005年 |
開発者 | マイクロソフト |
最新リリース | 4.1/ 2017年3月7日[1] |
型付け | 強い静的型付け |
影響を受けた言語 | OCaml、ML、C#、Haskell |
ライセンス | Apache License、Microsoft Public License (Ms-PL) |
ウェブサイト | fsharp.org |
F#(エフ シャープ)はマイクロソフトが開発した.NET Framework向けのマルチパラダイムプログラミング言語である。Visual Studio 2010より標準開発言語として追加された。
Contents
概要
2002年からマイクロソフトリサーチのドン・サイム (英: Don Syme) ら [2] によってOCamlをベースに開発が始められた。
OCamlから多くの要素を引き継いだ関数型とオブジェクト指向のマルチパラダイムである。型安全であり、型推論の機能をもつ。ただし、オーバーロードをサポートしているため、OCamlのもつ型推論の完全性を失っている。C#やVisual Basicなどの.NET Framework言語と相互運用性があり、.NETクラスライブラリの利用・開発が可能であり、Windows Phone 7のアプリケーション開発もサポートされている。
F#のFはFunctional programming language(関数型プログラミング言語)およびSystem Fが由来 [3]であり、Fortranとは無関係である。
F#の開発環境はVisual Studioの有償版製品(あるいは無償のCommunityエディション)にVisual F#として含まれているほか、Expressエディションで利用可能な無償ツールの配布もされている[4] [5] [6] [7]。Visual F# Tools 4.1でRoslynをサポートするようになった。また、Mono環境向けにもF#コンパイラが移植されているため、macOSやLinuxなどでもF#プログラムの開発および実行ができる。
OCaml互換の標準ライブラリを備えており、F#とOCamlのどちらでもコンパイルできるコードを記述することも可能である。しかしクラスの構文などはF#とOCamlで異なっている。
構文
OCamlと互換性のある冗語構文 (英: verbose syntax) と、Pythonのようなインデント(オフサイドルール)による軽量構文 (英: lightweight syntax) の二種類の構文を利用できる。標準では軽量構文が有効になっている。
例
Hello world
(* これはコメント *)
// 1行コメント。
(* 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#で書かれたソフトウェア
脚注
- ↑ Announcing F# 4.1 and the Visual F# Tools for Visual Studio 2017 | .NET Blog
- ↑ “F# at Microsoft Research”. Microsoft. . 2016閲覧.
- ↑ “The A-Z of programming languages: F#”. en:Network World by IDG. . 2016閲覧.
- ↑ Download Microsoft F#, August 2010 Community Technology Preview from Official Microsoft Download Center
- ↑ Download F# Tools for Visual Studio Express 2012 for Web from Official Microsoft Download Center
- ↑ Announcing Visual F# Tools 3.1.1, with support for Desktop and Web express - Visual F# Tools Team Blog - Site Home - MSDN Blogs
- ↑ Announcing the release of Visual F# Tools 3.1.2 - Visual F# Tools Team Blog - Site Home - MSDN Blogs