将元组列表转换为OCaml中列表的元组

时间:2017-10-03 13:32:46

标签: list recursion tuples ocaml

我想将元组列表转换为列表元组,第一个元组列表由原始元组元素的第一个元素组成。 例如

    convert [(1,2);(3,4);(5,6)] = ([1;3;5],[2;4;6])
像这样。

我尝试了几次并成功通过以下代码获得[1; 3; 5]。

    let rec convert lst = 
    match lst with
    |[]->[]
    |(a,b)::tl->a::(convert tl)

但是我不知道如何获取元组[2; 4; 6]的第二个列表元素以及如何将它们合并到一个元组中。

1 个答案:

答案 0 :(得分:4)

最简单的方法是使用标准库List.split,它完全符合您希望convert函数执行的操作。

现在,如果这是练习的一部分,我不会给你整个解决方案,但这里有一些指示。

首先,您必须返回一个列表元组。显然,空列表的匹配必须返回一对空列表。

现在,至于棘手的部分,假设你有(a,b)::tl,首先获得convert tl显然是件好事。如果你在let (tla,tlb) = convert tl写信,你会怎么做?你能解决吗?