撤銷任何型別的列表

要反轉列表,列表元素的型別,它們所處的順序並不重要。這是泛型函式的完美候選,因此無論傳遞什麼列表,都可以使用相同的反向函式。

let rev list =
    let rec loop acc = function
        | []           -> acc
        | head::tail -> loop (head::acc) tail
    loop [] list

程式碼不對元素的型別進行假設。編譯器(或 F#interactive)會告訴你該函式的型別簽名是'T list -> 'T list'T 告訴你它是一個沒有約束的泛型型別。你可能還會看到'a 而不是'T - 這封信不重要,因為它只是一個通用的佔位符。我們可以通過 int liststring list,兩者都能成功執行,分別返回 int liststring list

例如,在 F#interactive 中:

> let rev list = ...
val it : 'T list -> 'T list
> rev [1; 2; 3; 4];;
val it : int list = [4; 3; 2; 1]
> rev ["one", "two", "three"];;
val it : string list = ["three", "two", "one"]