自定义列表展平OCaml
我目前正在做一个自定义版本的自定义列表展平OCaml,ocaml,Ocaml,我目前正在做一个自定义版本的列表。展平,我在一个地方阻止了它。 我目前有: let rec doflatten (ls:int list list) (flatList: int list) : int list = match ls with | [] -> flatList | hd :: tl -> (doflatten (List.tl(ls)) (List.hd(hd) :: flatList)) 目前它可以编译,但是当我调用函数时,它会给我一个“失败hd”。
列表。展平
,我在一个地方阻止了它。
我目前有:
let rec doflatten (ls:int list list) (flatList: int list) : int list =
match ls with
| [] -> flatList
| hd :: tl -> (doflatten (List.tl(ls)) (List.hd(hd) :: flatList))
目前它可以编译,但是当我调用函数时,它会给我一个“失败hd”。假设它可以执行以下操作:
doflatten [[1;2;4]; []; [9]; [5;6]] [] = [1;2;4;9;5;6]
您使用的是列表列表列表,因此在此模式中:
| hd :: tl -> ...
标题hd
是一个列表
但是,hd
可以是空列表。您的代码无法正确处理此情况。你只需要决定你想做什么
您可以有这样一个额外的图案:
| [] :: tl ->
此模式将与所讨论的案例相匹配。您使用的是列表列表,因此在此模式中:
| hd :: tl -> ...
标题hd
是一个列表
但是,hd
可以是空列表。您的代码无法正确处理此情况。你只需要决定你想做什么
您可以有这样一个额外的图案:
| [] :: tl ->
此模式将与所讨论的案例相匹配