我正在尝试将整数列表转换为递归函数中的列表元组。
假设我有一个整数列表为[1;2;3;4;5;6;7;8]
,我希望将其转换为([1;3;5;7],[2;4;6;8])
在不同方面的分摊赔率和平均值
我面临很多问题,例如期望的结果是'a list * 'a list
而我有一个'b * 'c
偶数'b & 'c
是整数列表。
答案 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)