【问题标题】:Outputting first n elements in the list输出列表中的前 n 个元素
【发布时间】:2020-03-09 21:37:41
【问题描述】:

如何编写一个 f# 递归函数,它接受一个正整数 n 和一个列表 xs 作为输入,并返回一个仅包含 xs 中前 n 个元素的列表。

让记录一些东西 n xs = .. 东西 3 [1..10] = [1;2;3]

【问题讨论】:

    标签: list recursion f#


    【解决方案1】:

    简短的回答是:不要,只需使用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,然后反转结果。更好/更有效的方法将超出此问题的范围,应在单独的问题中回答。
    猜你喜欢
    • 2020-03-11
    • 2020-03-12
    • 1970-01-01
    • 2014-12-20
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多