【问题标题】:convert list of tuple into tuple of list in OCaml在 OCaml 中将元组列表转换为列表元组
【发布时间】:2018-03-14 17:24:23
【问题描述】:

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

    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] 的第二个列表元素以及如何将它们合并到一个元组中。

【问题讨论】:

  • 您正在研究的解决方案不会是尾递归的,并且有一种方法可以以尾递归的方式进行。尝试在@PatJ 的回答的帮助下完成你的任务,然后尝试进行尾递归,这实际上很容易,而且是一个很好的培训。 ;-)

标签: list recursion tuples ocaml


【解决方案1】:

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

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

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

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

【讨论】:

  • 我尝试了大约一个小时,终于解决了!非常感谢
猜你喜欢
  • 2015-02-13
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 2016-09-28
  • 1970-01-01
  • 2012-06-05
相关资源
最近更新 更多