List Ocaml类型与函数divide中的列表不匹配

List Ocaml类型与函数divide中的列表不匹配,list,types,ocaml,List,Types,Ocaml,我正在尝试编写一个除法函数(作为合并排序的一部分),它接受一个列表并返回两个长度大致相同的列表。 我想使用List.length()函数来完成它 我的代码是: 让rec transRec l1 l2=将l1、l2与 |l1,[]->l1,[] |l1,h::tail->if List.length(l1)

我正在尝试编写一个除法函数(作为合并排序的一部分),它接受一个列表并返回两个长度大致相同的列表。 我想使用List.length()函数来完成它

我的代码是:

让rec transRec l1 l2=将l1、l2与
|l1,[]->l1,[]
|l1,h::tail->if List.length(l1)
我在编译时遇到以下错误,我不理解:

第4行,字符5-26:
错误:此表达式的类型为“a列表”
但表达式应为'b list*'c list类型

我不明白为什么
transRec h::l1 tail
被视为一个列表。

您需要在
(h::l1)
周围加上括号。如果没有括号,表达式的解析方式如下:

(transRec h) :: (l1 tail)
这是因为函数应用程序在OCaml中具有较高的优先级

编译器告诉您表达式必须是某种列表(因为中间有
操作符),但您需要一对列表