Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在OCaml中展平列表_List_Functional Programming_Ocaml - Fatal编程技术网

List 在OCaml中展平列表

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] 我不知道从哪里开始,有人能给我一些建议吗?谢谢你我看不出列表。展平和你的功能有什么区别 回答您的问题:与列表一样,尝试思

我正在使用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]

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

我看不出列表。展平和你的功能有什么区别

回答您的问题:与列表一样,尝试思考基本情况:

  • 当您将空列表与某个内容连接在一起时,您会怎么做
  • 当你将一个非空列表(有一个头和一个尾)与某个东西连接起来时,你会怎么做

把所有的东西都包成一个模式匹配,煮几个小时,就完成了:-)

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

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
类型中查找更深层次的列表结构。