F Sharp

F#（エフ シャープ）はマイクロソフトが開発した.NET Framework向けのマルチパラダイムプログラミング言語である。Visual Studio 2010より標準開発言語として追加された。
概要.
2002年からマイクロソフトリサーチの () ら
によってOCamlをベースに開発が始められた。
OCamlから多くの要素を引き継いだ関数型とオブジェクト指向のマルチパラダイムである。型安全であり、型推論の機能をもつ。ただし、オーバーロードをサポートしているため、OCamlのもつ型推論の完全性を失っている。C#やVisual Basic .NETなどの.NET言語と相互運用性があり、.NETクラスライブラリの利用・開発が可能であり、MonoおよびXamarinを利用したAndroidアプリケーション開発もサポートされている。以前はSilverlightを利用したWindows Phone 7のアプリケーション開発もサポートされていた。
F#のFはFunctional programming language（関数型プログラミング言語）およびSystem Fが由来
である。
F#の開発環境はVisual Studioの有償版製品（あるいは無償のCommunityエディション）にVisual F#として含まれているほか、Expressエディションで利用可能な無償ツールの配布もされている。Visual F# Tools 4.1でをサポートするようになった。また、Monoや.NET Core環境向けにもF#コンパイラが移植されているため、macOSやLinuxなどでもF#プログラムの開発および実行ができる。
OCaml互換の標準ライブラリを備えており、F#とOCamlのどちらでもコンパイルできるコードを記述することも可能である。しかしクラスの構文などはF#とOCamlで異なっている。
構文.
OCamlと互換性のある冗語構文 () と、Pythonのようなインデント（オフサイドルール）による軽量構文 () の二種類の構文を利用できる。標準では軽量構文が有効になっている。
例.
Hello world.
// 1行コメント。
printfn "Hello World!"
再帰による階乗のプログラム.
let rec factorial n =
 match n with
 | 0 -> 1
 | _ -> n * factorial (n - 1)
再帰関数の例.
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
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] 
let fibSeq = Seq.unfold (fun (a,b) -> Some(a+b, (b, a+b))) (1,1)
[1 .. 10]
[ for i in 1..10 do
 let r = fib i
 if r % 2 = 0 then yield r ]
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")