我想将元组列表转换为列表元组,第一个元组列表由原始元组元素的第一个元素组成。 例如
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]的第二个列表元素以及如何将它们合并到一个元组中。
答案 0 :(得分:4)
最简单的方法是使用标准库List.split
,它完全符合您希望convert
函数执行的操作。
现在,如果这是练习的一部分,我不会给你整个解决方案,但这里有一些指示。
首先,您必须返回一个列表元组。显然,空列表的匹配必须返回一对空列表。
现在,至于棘手的部分,假设你有(a,b)::tl
,首先获得convert tl
显然是件好事。如果你在let (tla,tlb) = convert tl
写信,你会怎么做?你能解决吗?