撤销任何类型的列表

要反转列表,列表元素的类型,它们所处的顺序并不重要。这是泛型函数的完美候选,因此无论传递什么列表,都可以使用相同的反向函数。

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"]