【问题标题】:Finding Max/Min number in list in Ocaml在 Ocaml 的列表中查找最大/最小数
【发布时间】:2020-01-29 03:25:00
【问题描述】:

我最近才开始学习 Ocaml,现在才开始练习一些代码。 在这种情况下,我尝试在列表中查找最大数量,但它不断返回错误消息。

let max: int list -> int
= fun lst ->
match lst with
 |[] -> 0
 |h::[] -> h
 |h::t -> let a = max t in
            if h < a then h
            else
             a;;

Ocaml 一直在说:

错误:此表达式的类型为 int list -> int list 但表达式应为 int 类型。

我不明白为什么 a 是一个 int 列表,尽管我声称它是一个 max t,它是一个将 int 列表变成 int 的函数...感谢您的帮助。

【问题讨论】:

    标签: recursion compiler-errors ocaml


    【解决方案1】:

    a 具有int list -&gt; int list 类型,因为let a = max t 中的max 不是指您的函数,而是指the one defined in StdlibStdlib(以前称为Pervasives)包含非常常用的定义,因此默认为您打开。

    Stdlib.max 的类型为 'a -&gt; 'a -&gt; 'a。因此,当您将int list 传递给它时,编译器会将'a 推断为int list 并返回一个类型为int list -&gt; int list 的函数。

    为什么max 不引用你自己的max 函数?因为您忘记了 rec 关键字。您可能已经知道,rec 使该函数可在其内部被调用。

    您应该避免隐藏Stdlib 函数名称,以避免出现此类混淆错误。如果您选择了不同的名称,您只会收到一条错误消息,告诉您max 不存在。

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多