功能基礎

F#中的大多數函式都是使用 let 語法建立的:

let timesTwo x = x * 2

這定義了一個名為 timesTwo 的函式,它接受一個引數 x。如果你執行互動式 F#會話(OS X 和 Linux 上的 fsharpi,Windows 上的 fsi.exe)並將該功能貼上到(並新增告訴 fsharpi;; 以評估你剛剛輸入的程式碼),你將看到它回覆:

val timesTwo : x:int -> int

這意味著 timesTwo 是一個函式,它接受 int 型別的單個引數 x,並返回 int。函式簽名通常在沒有引數名稱的情況下編寫,因此你經常會看到此函式型別寫為 int -> int

可是等等! F#怎麼知道 x 是一個整數引數,因為你從未指定過它的型別?這是由於型別推斷。因為在函式體中,你將 x 乘以 2x2 的型別必須相同。 (作為一般規則,F#不會隱式地將值轉換為不同的型別;你必須明確指定所需的任何型別轉換)。

如果要建立一個不帶任何引數的函式,這是錯誤的方法:

let hello =  // This is a value, not a function
    printfn "Hello world"

正確的做到這一點的方法是:

let hello () =
    printfn "Hello world"

hello 函式的型別為 unit -> unit,在 單位型別中進行了解釋。