在OCaml中展平列表列表

时间:2012-03-26 21:03:13

标签: list functional-programming ocaml

我正在使用Ocaml实现这个hoemwork功能:

  • 不允许使用List模块
  • 该函数的类型为'a list list -> 'a list
  • 该函数返回一个列表,该列表由x中的列表连接在一起(只是顶级列表连接在一起,与List.flatten不同)
  • 例如:[[1,2,3],[45]] => [1,2,3,4,5][[[1,2,3],[4,5]],[[6,7]]] => [[1,2,3],[4,5],[6,7]]

我不知道从哪里开始,有人能给我一些建议吗?谢谢

2 个答案:

答案 0 :(得分:6)

我没有看到List.flatten与您的功能之间存在差异。

回答你的问题:像往常一样,尝试考虑基本情况:

  • 当您将空列表与某些内容连接起来时,您会怎么做?
  • 当你将非空列表(头部和尾部)连接起来时,你会怎么做?

将所有东西包裹成模式匹配,煮几个小时,然后就完成了: - )

答案 1 :(得分:2)

托马斯提出了很好的建议。您的基本操作是将一个列表附加到另一个列表。首先将此函数编写为单独的函数可能会有所帮助。它看起来像这样:

let rec myappend a b =
    match a with
    | [] -> (* Empty list prefixed to b (easy case) *)
    | ahead :: atail -> (* Recursive case *)

使用您自己的追加功能,您可以执行另一级别的递归 如托马斯建议的那样附上所有顶级名单。