Types 带有箭头的OCaml函数类型->;

Types 带有箭头的OCaml函数类型->;,types,ocaml,Types,Ocaml,我正在使用OCaml StringMap.add函数,如下所示: let rec makecount l = function [] -> mymap | s::tl -> if (not (StringMap.mem s mymap)) then StringMap.add s 1 makecount(tl) else StringMap.add s ((StringMap.find s mymap) + 1) ma

我正在使用OCaml StringMap.add函数,如下所示:

let rec makecount l = function
    [] -> mymap
    | s::tl -> 
    if (not (StringMap.mem s mymap)) then
        StringMap.add s 1 makecount(tl)
    else
        StringMap.add s ((StringMap.find s mymap) + 1) makecount(tl)
我得到了错误,参考StringMap.add.s1 makecount(List.tl l):

首先,有人能解释一下函数类型的格式吗。那些箭是什么意思?如果有人也能找到错误,那也很好

function
    []    -> ...
  | s::tl -> ...
是一个匿名函数,它将其参数与
[]
s::tl
匹配,并执行第一个“适合”的分支<代码>[]将只匹配空列表
s::tl
匹配任何至少有一个元素的列表(
s
),其中
tl
是尾部-当你砍掉头部时得到的列表


将此匿名函数赋值给
makecount l
;意思是
makecount
本身现在需要两个参数(在这里您永远不会再次使用
l
)。解决方案很简单:只需删除
l
,并使
makecount
成为一个接受一个参数的函数(如上所述)。

如果编写:StringMap.adds1(makecount(List.tl))? 发生的情况是,makecount在代码中被视为一个参数,而您希望得到makecount的结果(List.tl)


箭头表示String.Map需要3个参数(分别为StringMap.key、'a'和StringMap.t类型),并返回'a StringMap.t'类型的结果。

YES!这就是问题所在。谢谢你解释箭头的事情。谢谢你的评论!它帮助我理解了OCaml的格式。是的,这是问题的一部分。
function
    []    -> ...
  | s::tl -> ...