自定义列表展平OCaml

时间:2018-10-01 01:05:20

标签: ocaml

我当前正在制作List.flatten的自定义版本,并且在一个地方被屏蔽。 我目前有:

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))

当前可以编译,但是当我调用该函数时,它给了我一个“ failure hd”。它应该做类似的事情:

doflatten [[1;2;4]; []; [9]; [5;6]] [] = [1;2;4;9;5;6] 

1 个答案:

答案 0 :(得分:2)

您正在使用列表列表,因此采用以下模式:

| hd :: tl -> ...

hd是一个列表。

但是,hd可以为空列表。您的代码无法正确处理这种情况。您只需要决定要做什么。

您可以有一个这样的额外模式:

| [] :: tl ->

此模式将匹配相关案例。