我实现使用Ocaml程序编写本hoemwork功能列表的列表:压扁OCaml中
- 不准使用
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]]
我不确定从哪里开始,谁能给我一些建议?谢谢
我实现使用Ocaml程序编写本hoemwork功能列表的列表:压扁OCaml中
List
模块'a list list -> 'a list
[[1,2,3],[45]] => [1,2,3,4,5]
和[[[1,2,3],[4,5]],[[6,7]]] => [[1,2,3],[4,5],[6,7]]
我不确定从哪里开始,谁能给我一些建议?谢谢
我没有看到List.flatten
和你的功能之间的区别。
要回答你的问题:像往常一样名单,去想想基本情况:
裹一切都变成一个模式匹配,煮了几个小时,这样做了:-)
托马斯给了绝好的建议。您的基本操作将是将一个列表追加到另一个列表。首先将这个函数作为一个单独的函数写出可能会有所帮助。它会是这个样子:
let rec myappend a b =
match a with
| [] -> (* Empty list prefixed to b (easy case) *)
| ahead :: atail -> (* Recursive case *)
武装用自己的附加功能,你可以进行递归 的另一个层面追加所有顶级名单托马斯建议。
只是一个评论:List.flatten只是平坦的顶级。它不会“变得更深”。实际上你可以从参数化中弄清楚这一点。它具有''列表列表 - >'列表',因此不能在深层列表结构中查看''a'类型。 – 2012-03-26 21:14:31