我正在尝试用OCaml编写一个函数,以从任何给定列表中删除连续的重复项。我相信我已经找到了正确的递归函数,但是当我尝试用int list
或string list
测试它时,它告诉我我的函数需要类型'a list
。任何帮助将不胜感激。
这是我的代码:
let compress l =
let rec compress_loop l cl e =
match l with
|[] -> cl
|h::t -> if(h == e) then
compress_loop t cl h
else
compress_loop t (List.append cl h) h
in
compress_loop l [] [];;
compress ["a";"b"];;
根本问题是这里给出的最后一个参数:compress_loop l [] []
。由于您向其传递空列表,因此e
必须为'a list
类型。而且因为你e
与if(h == e) then
中的h
进行比较,h
也必须是一个'a list
。而且因为h
是从l
解构的,这也是一个列表,所以l
必须有'a list list
的类型。
因此,当你给它一个string list
编译器会告诉你它期望元素的类型是'a list
,而不是string
。