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 异常。这样您的代码将适用于所有类型的列表。
更新
现在错误出现在您测试函数的行中。你也需要括号。
(你不应该一直改代码,以后来这个页面的人将无法关注问题和答案。)
我正在尝试使用以下代码递归查找 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 异常。这样您的代码将适用于所有类型的列表。
更新
现在错误出现在您测试函数的行中。你也需要括号。
(你不应该一直改代码,以后来这个页面的人将无法关注问题和答案。)