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 *)
我正在尝试在 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 *)