【问题标题】:Converting a list of integers to a tuple of lists将整数列表转换为列表元组
【发布时间】:2012-10-04 20:40:41
【问题描述】:

我正在尝试将整数列表转换为递归函数中的列表元组。

假设我有一个整数列表为[1;2;3;4;5;6;7;8],我想将其转换为([1;3;5;7],[2;4;6;8]) 在不同方面划分奇偶数

我面临很多问题,例如预期结果是'a list * 'a list,而我有一个'b * 'c,即使'b & 'c 是整数列表。

【问题讨论】:

  • 你能告诉我们你到目前为止的代码吗?
  • 嗯,我的代码是不同的,是其他东西的一部分,但我可以写一个示例代码;让 recoddEven lst 匹配 lst 与 [] -> ([],[]) |x::xs -> if (x % 2 = 0) then ... else if (x % 2 > 0) then ... ;;我是 f# 的新手,现在有点卡住了。
  • 您的代码片段不完整,没有显示您面临的问题。请考虑添加一个完整且有用的示例。

标签: list f# tuples


【解决方案1】:

既然您专门要求递归函数..:

let partitionNumbers nums =
    let rec impl odds evens = function
      | []                   -> odds, evens
      | n::ns when n % 2 = 1 -> impl (n::odds) evens ns
      | n::ns                -> impl odds (n::evens) ns
    List.rev nums |> impl [] []

然而,更惯用的方法是(几乎-总是)使用高阶函数:

let partitionNumbers = List.partition (fun n -> n % 2 = 1)

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2016-09-28
    • 2018-12-19
    • 2015-02-13
    • 2021-05-15
    相关资源
    最近更新 更多