Ocaml 函数解析list of lists

Ocaml function parsing list of lists

我正在尝试在 Ocaml 中构建一个函数来解析列表的列表,例如从 [[0;1];[3;4;8]] 到 [0;1;3;4;8] .我尝试做类似的事情:

#let rec parse listoflists= 
   match listoflists with 
 [[]]->[]
|[h::t]->h::parse [t];;

但它不起作用...我还需要一个解释,因为我不明白列表的列表实际上是如何工作的...

我不必使用 Ocaml 库函数。

如果你能理解列表,那么我声称你已经知道列表的列表。这就是递归的美妙之处。

唯一真正的困难(如我所见)是跟踪您正在谈论的列表。您的代码需要处理列表列表本身,它由一个列表(称之为 h)和其他一些列表组成。它还需要处理列表 h,它由一些元素(称之为 hh)和一些其他元素组成。

在我看来有三种有趣的情况:(a) lists of lists 是空的; (b) 列表列表 h 的第一个元素为空 (c) 列表列表和 h 都不为空。

您没有处理所有这三种情况。这是判断您的代码可能无法运行的一种方式。

这里有一个 match 匹配三种情况,这可能有点帮助:

match listoflists with
| [] -> ...              (* List of lists is empty *)
| [] :: t -> ...         (* First list h is empty *)
| (hh :: ht) :: t -> ... (* Neither is empty *)