0
我想编写一个函数,它将组合OCaml中列表中的所有元素。够简单了,到目前为止,我有一个工作功能:列表OCaml类型错误
let rec comAll (f : 'a -> 'a -> 'a) (r : 'a) (l : 'a list) : 'a =
match l with [] -> r
| hd::tl -> let comAll2 = comAll f r tl in f hd comAll2
;;
的第一个参数是一个函数,第二个是一个默认值返回时/如果输入列表是空的,而第三个参数是列表本身。
此功能按预期工作,除了当我尝试调用它使用其他功能,例如:
let inList (l : 'a list) (e : 'a) : bool = comAll (fun x y -> if x == e then true else y) false l ;;
将通过一个函数,返回inList : bool list -> bool -> bool = <fun>
不过,我想,而不是使其返回inList : 'a list -> 'a -> bool = <fun>
我试着改为将comAll定义为:let rec comAll f r l =...
,那可行,但我想用明确的类型声明该函数。
任何帮助或指导我在做什么不正确在这里?
好的,但为了我正在工作的目的,是否有办法让它使用'a - >'a - >'a'? – Jeremy
不,没有。你想传递一个不是''a - >'a - >'a'类型的函数。 –
好的。谢谢您的帮助。我想我现在已经掌握了它 – Jeremy