我试图使用以下代码递归地在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 `;'.
答案 0 :(得分:0)
您的定义是要求两个单独的参数(即,它是咖喱)。但是你传递了一对参数(t, n - 1)
。这些都不是一回事。
要解决此问题,请将递归调用更改为get_val t (n - 1)
。
当列表太短时,您可能会考虑引发Not_found异常。这样,您的代码将适用于所有类型的列表。
<强>更新强>
现在错误位于您测试功能的行中。你也需要括号。
(您不应该继续更改您的代码。之后访问此页面的用户将无法按照问题和答案进行操作。)