F♯

F#係由微軟為.NET語言提供運行環境而整出嚟嘅一隻程式語言，係函數程式語言，函數程式語言最重要嘅基礎係Lambda Calculus。佢係基於OCaml嘅，而OCaml係基於ML嘅，所以有時F#同埋OCaml嘅程式可以交互編譯。

F#支援高階函數、柯里化、惰性求值、Continuations、模式匹配、閉包、列表處理同埋元編程。呢個係一個用喺顯示.NET喺不同編程語言間互通嘅程序設計，可以畀.NET中嘅任意其它代碼編譯同埋調用。

2002年微軟開始由Don Syme帶領研發F#，由C#，LINQ同埋Haskell入面獲取嘅經驗，2005年推出第一個版本，2007年7月31日出咗1.9.2.9版。2007年底，微軟宣布F#進入產品化嘅階段。

F#已經被人集成喺Visual Studio 2010入面，版本係2.0，含有對.Net Framework嘅完全支持。

依家F#喺Visual Studio 2015入面，版本係4.0。

依家F#喺Visual Studio 2017入面，版本係4.1。

應用領域
F# 係一種 通用編程語言。

網絡編程
SAFE Stack 係用喺開發 Web 應用程序嘅P2P F# 堆棧。佢係伺服器端用 ASP.NET Core，喺客戶端用 Fable。

另一個P2P F# 選項係 WebSharper 框架。

跨平台應用開發
F# 可以同 Visual Studio Tools for Xamarin 一齊用，幫 iOS 同埋 Android 開發應用程序。 庫提供咗更好睇嘅功能界面。

分析編程 
其中，F# 用於量化金融編程、 能源交易同投資組合優化、 機器學習， 商業智能 同埋 Facebook 上嘅社交遊戲。

2010 年代，F# 被人定位做 C# 嘅優化替代品。F# 嘅腳本編寫能力同所有 Microsoft 產品嘅跨語言兼容性令佢喺開發人員入面廣受歡迎。

腳本
F# 可以用喺腳本語言，主要用喺桌面 read–eval–print loop腳本。

開源社區
F# open-source 社區包括 F# Software Foundation 同埋 GitHub 上的 F# Open Source Group。<ref name="fsharposg" /  > 流行嘅開源 F# 項目包括：

，一個基於 Babel 嘅 F# 轉 Javascript 嘅轉譯器。
 ，.NET 嘅替代包管理器，仍然可以用 NuGet 存儲庫，但係具有集中嘅版本管理。
 ，一個 F# 友好嘅構建系統。
 Giraffe，用於 ASP.NET Core 面向功能嘅中間件。
 ，一個輕量級嘅網絡伺服器同埋網絡開發庫。

兼容性
F# 具有傳統嘅「ML 兼容模式」，可以粗略咁直接編譯用 OCaml 嘅大子集編寫嘅程序，冇函子、對象、多態變體或者其他添加。

例子 
下面係F#嘅Hello World：
  // This is a comment for a sample hello world program.
 printfn "Hello World!"

具有構造函數嘅Person類，呢個構造函數具有名稱同埋年齡仲有兩個唔變得嘅屬性。
  /// This is a documentation comment for a type definition.
 type Person(name : string, age : int) =
     member x.Name = name
     member x.Age = age

/// class instantiation
 let mrSmith = Person("Smith", 42)

一個經常用喺演示函數式語言語法嘅簡單示例。呢度用32位嘅階乘函數作為例子：
  /// Using pattern matching expression
 let rec factorial n =
     match n with
     | 0 -> 1
     | _ -> n * factorial (n - 1)

/// For a single-argument functions there is syntactic sugar (pattern matching function):
 let rec factorial = function 
     | 0 -> 1 
     | n -> n * factorial (n - 1)

/// Using fold and range operator
 let factorial n = [1..n] |> Seq.fold (*) 1

迭代示例：
  /// Iteration using a 'for' loop
 let printList lst = 
     for x in lst do
         printfn "%d" x

/// Iteration using a higher-order function
 let printList2 lst = 
     List.iter (printfn "%d") lst

/// Iteration using a recursive function and pattern matching
 let rec printList3 lst =
     match lst with
     | [] ->     | h :: t ->
         printfn "%d" h
         printList3 t

斐波那契數列數列示例：
  /// Fibonacci Number formula
 let fib n =
     let rec g n f0 f1 =
         match n with
         | 0 -> f0
         | 1 -> f1
         | _ -> g (n - 1) f1 (f0 + f1)
     g n 0 1

/// Another approach - a lazy infinite sequence of Fibonacci numbers
 let fibSeq = Seq.unfold (fun (a,b) -> Some(a+b, (b, a+b))) (0,1)

// Print even fibs
 [1 .. 10]
 |> List.map     fib
 |> List.filter  (fun n -> (n % 2) = 0)
 |> printList

// Same thing, using a list expression
 [ for i in 1..10 do
     let r = fib i
     if r % 2 = 0 then yield r ]
 |> printList

一個Windows程序樣本示例：
  // Open the Windows Forms library
 open System.Windows.Forms

// Create a window and set a few properties
 let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#")

// Create a label to show some text in the form
 let label =
     let x = 3 + (4 * 5)
     new Label(Text = sprintf "x = %d" x)

// Add the label to the form
 form.Controls.Add(label)

// Finally, run the form
 [<System.STAThread>]
 Application.Run(form)

多線程編程示例：
  /// A simple prime number detector
 let isPrime (n:int) =
    let bound = int (sqrt (float n))
    seq {2 .. bound} |> Seq.forall (fun x -> n % x <> 0)

// We are using async workflows
 let primeAsync n =
     async { return (n, isPrime n) }

/// Return primes between m and n using multiple threads
 let primes m n =
     seq {m .. n}
         |> Seq.map primeAsync
         |> Async.Parallel
         |> Async.RunSynchronously
         |> Array.filter snd
         |> Array.map fst

// Run a test
 primes 1000000 1002000
     |> Array.iter (printfn "%d")

微軟F#
 喺 GitHub入面嘅 F# 開源碼
 F Sharp
 Planet F#
 F#

微軟研究院
.NET程式語言
ML語言家族
模式匹配編程語言