撤銷任何型別的列表
要反轉列表,列表元素的型別,它們所處的順序並不重要。這是泛型函式的完美候選,因此無論傳遞什麼列表,都可以使用相同的反向函式。
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 list
或 string list
,兩者都能成功執行,分別返回 int list
或 string 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"]