List 输出列表中的前n个元素
如何编写一个f#递归函数,该函数接受一个正整数n和一个列表xs作为输入,并返回一个只包含xs中前n个元素的列表 让我们记录一些东西= ..List 输出列表中的前n个元素,list,recursion,f#,List,Recursion,F#,如何编写一个f#递归函数,该函数接受一个正整数n和一个列表xs作为输入,并返回一个只包含xs中前n个元素的列表 让我们记录一些东西= .. 3[1..10]=[1;2;3]简单的回答是:不要,只使用Seq.take 简单的版本如下: let rec take n list = match n with | 0 -> [] | _ -> List.head list :: take (n - 1) (List.tail list) 尾部递归可能如下所示: let rec
3[1..10]=[1;2;3]简单的回答是:不要,只使用
Seq.take
简单的版本如下:
let rec take n list =
match n with
| 0 -> []
| _ -> List.head list :: take (n - 1) (List.tail list)
尾部递归可能如下所示:
let rec take n list =
let rec innertake m innerlist acc =
match m with
| 0 -> List.rev acc
| _ -> innertake (m - 1) (List.tail innerlist) ((List.head innerlist) :: acc)
innertake n list []
请注意,这两种方法都不能处理输入列表比请求的项数短的情况。最后3个元素如何?简单的方法是反转列表,在新列表上运行
获取,然后反转结果。更好/更有效的方法超出了此问题的范围,应在单独的问题中回答。