【问题标题】:Type Mismatch in ocamlocaml 中的类型不匹配
【发布时间】:2015-05-28 06:16:39
【问题描述】:

我正在尝试使用以下代码递归查找 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 `;'.

【问题讨论】:

    标签: recursion ocaml


    【解决方案1】:

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

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

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

    更新

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

    (您不应该不断更改您的代码。稍后访问此页面的人将无法关注问题和答案。)

    【讨论】:

    • 我按照您的建议更改了递归调用,但仍然出现错误。我已经编辑了原始帖子以显示新错误
    • 你没有像我建议的那样改变它! :-) 提示:括号很重要。
    • 谢谢。我忘记了导致参数过多错误的 print_int 调用的括号。
    猜你喜欢
    • 2019-03-27
    • 2012-01-12
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多