Ocaml 删除列表中的前n项

Ocaml 删除列表中的前n项,ocaml,Ocaml,我正在尝试创建一个函数,该函数将删除列表的前n项: let rec drop n h = if n == 0 then h else (drop n-1 (match h with a::b -> b));; 这就是: Characters 43-49: if n == 0 then h else (drop n-1 (match h with a::b -> b));; ^^^^^^ Error: This expr

我正在尝试创建一个函数,该函数将删除列表的前n项:

let rec drop n h =
   if n == 0 then h else (drop n-1 (match h with a::b -> b));;
这就是:

Characters 43-49:
   if n == 0 then h else (drop n-1 (match h with a::b -> b));;
                          ^^^^^^
Error: This expression has type 'a -> 'b but is here used with type int
这里怎么了?这是我使用OCAML的第一天(通常是函数式编程),我只是在网上学习手册和教程。我不知道这个消息是什么意思


此外,这是一个更大的家庭作业的一部分,除了函数定义之外不需要使用Let,也不需要使用额外的库

drop n-1
被解析为
(drop n-1)-1
,您希望
drop(n-1)
到编译器,您的
else
案例如下所示:

((drop n)-1 (match h with a::b -> b))
错误消息表示
(drop n)
是一个函数,您试图将其用作
int
(从中减去一个)

你的意思是:

(drop (n-1) (match h with a::b -> b))
OCaml的关联性一开始有点令人惊讶,但由于OCaml中的语法结构太少,因此很快就可以很容易地预测编译器将如何解析短语