OCaml 中的多态函数不接受不同的类型



我正在尝试用OCaml编写一个函数,以从任何给定列表中删除连续的重复项。我相信我已经找到了正确的递归函数,但是当我尝试用int liststring 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类型。而且因为你eif(h == e) then中的h进行比较,h也必须是一个'a list。而且因为h是从l解构的,这也是一个列表,所以l必须有'a list list的类型。

因此,当你给它一个string list编译器会告诉你它期望元素的类型是'a list,而不是string

最新更新