将整数列表转换为列表元组

时间:2012-10-04 20:40:41

标签: list f# tuples

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

假设我有一个整数列表为[1;2;3;4;5;6;7;8],我希望将其转换为([1;3;5;7],[2;4;6;8])在不同方面的分摊赔率和平均值

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

1 个答案:

答案 0 :(得分:6)

因为您专门询问了递归函数..:

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)