为什么没有List.skip和List.take?当然有Seq.take和Seq.skip,但它们不会创建列表。为什么没有List.skip和List.take?
一个可能的解决方案是:mylist |> Seq.skip N |> Seq.toList 但是,这会创建第一个枚举器,然后从该枚举器创建一个新列表。我认为可以有更直接的方式从不可变列表创建不可变列表。由于内部不存在元素的复制,因此只有从新列表到原始列表的引用。
其他可能的解决方案(没有出现任何的异常)是:
let rec listSkip n xs =
match (n, xs) with
| 0, _ -> xs
| _, [] -> []
| n, _::xs -> listSkip (n-1) xs
但是,这仍然不能回答这个问题...
`List.skip`不需要创建一个新的列表,但是`List.take`会。 – Benjol 2010-12-02 12:00:00
你是对的! – 2010-12-03 15:04:06