The*_*ost 13 f# sequences list
为什么没有List.skip和List.take?当然有Seq.take和Seq.skip,但它们不会创建列表.
一种可能的解决方案是:mylist |> Seq.skip N |> Seq.toList但是这会创建第一个枚举器,然后从该枚举器创建一个新列表.我认为可以有更直接的方法从不可变列表创建不可变列表.由于内部没有复制元素,因此只有从新列表到原始列表的引用.
其他可能的解决方案(不抛出异常)是:
let rec listSkip n xs =
match (n, xs) with
| 0, _ -> xs
| _, [] -> []
| n, _::xs -> listSkip (n-1) xs
Run Code Online (Sandbox Code Playgroud)
但这仍然没有回答这个问题......
小智 12
顺便说一句,您可以将您的功能添加到列表模块:
module List =
let rec skip n xs =
match (n, xs) with
| 0, _ -> xs
| _, [] -> []
| n, _::xs -> skip (n-1) xs
Run Code Online (Sandbox Code Playgroud)