Ocaml 删除列表中的前n项
我正在尝试创建一个函数,该函数将删除列表的前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
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中的语法结构太少,因此很快就可以很容易地预测编译器将如何解析短语