List 在OCaml中展平列表
我正在使用Ocaml实现此hoemwork功能:List 在OCaml中展平列表,list,functional-programming,ocaml,List,Functional Programming,Ocaml,我正在使用Ocaml实现此hoemwork功能: 不允许使用列表模块 该函数具有类型'a list->'a list 函数返回一个列表,该列表由x个串联在一起的列表组成(与list.flatte不同,仅将列表的顶层串联在一起) 例如:[[1,2,3],[45]=>[1,2,3,4,5]和[[1,2,3],[4,5],[[6,7]]=>[1,2,3],[4,5],[6,7] 我不知道从哪里开始,有人能给我一些建议吗?谢谢你我看不出列表。展平和你的功能有什么区别 回答您的问题:与列表一样,尝试思
- 不允许使用
模块列表
- 该函数具有类型
'a list->'a list
- 函数返回一个列表,该列表由x个串联在一起的列表组成(与list.flatte不同,仅将列表的顶层串联在一起)
- 例如:
和[[1,2,3],[45]=>[1,2,3,4,5]
[[1,2,3],[4,5],[[6,7]]=>[1,2,3],[4,5],[6,7]
我不知道从哪里开始,有人能给我一些建议吗?谢谢你我看不出列表。展平和你的功能有什么区别 回答您的问题:与列表一样,尝试思考基本情况:
- 当您将空列表与某个内容连接在一起时,您会怎么做
- 当你将一个非空列表(有一个头和一个尾)与某个东西连接起来时,你会怎么做
把所有的东西都包成一个模式匹配,煮几个小时,就完成了:-)托马斯给出了很好的建议。您的基本操作是将一个列表附加到另一个列表。首先将此函数作为单独的函数编写可能会有所帮助。它看起来像这样:
let rec myappend a b =
match a with
| [] -> (* Empty list prefixed to b (easy case) *)
| ahead :: atail -> (* Recursive case *)
通过使用自己的append函数,可以执行另一个级别的递归
按照Thomas的建议附加所有顶级列表。只需一条注释:List.flatte只需将顶级列表展平即可。它不会压扁“超深”。你可以从参数学中找到答案。它的类型是
'a list->'a list
,因此无法在'a
类型中查找更深层次的列表结构。