我当前正在制作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]
答案 0 :(得分:2)
您正在使用列表列表,因此采用以下模式:
| hd :: tl -> ...
头hd
是一个列表。
但是,hd
可以为空列表。您的代码无法正确处理这种情况。您只需要决定要做什么。
您可以有一个这样的额外模式:
| [] :: tl ->
此模式将匹配相关案例。