Recursion ocaml中的类型不匹配

Recursion ocaml中的类型不匹配,recursion,ocaml,Recursion,Ocaml,我尝试使用以下代码在ocaml中递归地查找列表中的第n个元素 let rec get_val x n = match x with [] -> -1 | h::t -> if (n=0) then h else get_val t (n-1) ;; print_int get_val [1; 2; 3] 1;; 然而,这段代码给了我一个错误 This function has type int -> unit It is applied to too man

我尝试使用以下代码在ocaml中递归地查找列表中的第n个元素

let rec get_val x n = match x with
    [] -> -1
    | h::t -> if (n=0) then h else get_val t (n-1)
;;

print_int get_val [1; 2; 3] 1;;
然而,这段代码给了我一个错误

This function has type int -> unit
It is applied to too many arguments; maybe you forgot a `;'.

您的定义要求两个单独的参数(即,它是curry)。但是您正在传递一对参数
(t,n-1)
。这不是一回事

要解决此问题,请将递归调用更改为
get_val t(n-1)

当列表太短时,您可以考虑提高NOTHY异常。这样,您的代码将适用于所有类型的列表

更新

现在,错误出现在测试函数的行中。你也需要括号


(您不应该一直更改代码。稍后访问此页面的用户将无法按照问题和答案进行操作。)

我按照您的建议更改了递归调用,但仍然出现错误。我已经编辑了原始帖子以显示新错误您没有按照我的建议更改它!:-)提示:括号很重要。谢谢。我忘记了print_int调用的括号,这导致了参数过多错误。