由于您无法向后遍历序列,因此列表是反转序列的理想存储介质.他们建造它们时甚至会有逆转的倾向.
不过,我不知道为什么rev不在Seq模块中.甚至LINQ都有一个Reverse()运营商.幸运的是,它很容易实现.
let rev xs = Seq.fold (fun acc x -> x::acc) [] xs
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用LINQ的运算符.
let rev = System.Linq.Enumerable.Reverse
Run Code Online (Sandbox Code Playgroud)
其实现的APISeq本质上有两个功能
因此,无法检查列表的长度。枚举也可能非常昂贵,因为没有缓存结果,甚至可能导致发生副作用。
而且,序列可能是无限的。
结果,我们没有Seq.rev,我们需要首先使用到另一个序列的变换。