【发布时间】:2020-03-09 21:37:41
【问题描述】:
如何编写一个 f# 递归函数,它接受一个正整数 n 和一个列表 xs 作为输入,并返回一个仅包含 xs 中前 n 个元素的列表。
让记录一些东西 n xs = .. 东西 3 [1..10] = [1;2;3]
【问题讨论】:
如何编写一个 f# 递归函数,它接受一个正整数 n 和一个列表 xs 作为输入,并返回一个仅包含 xs 中前 n 个元素的列表。
让记录一些东西 n xs = .. 东西 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 []
请注意,这些都不能处理输入列表短于请求的项目数的情况。
【讨论】:
take,然后反转结果。更好/更有效的方法将超出此问题的范围,应在单独的问题中回答。