ocaml 中的类型不匹配

Type Mismatch in 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 many arguments; maybe you forgot a `;'.

您的定义要求两个单独的参数(即柯里化)。但是您要传递一对参数 (t, n - 1)。这些不是一回事。

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

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

更新

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

(你不应该一直改代码,以后来这个页面的人将无法关注问题和答案。)