在 Ocaml 的列表中查找最大/最小数

Posted

技术标签:

【中文标题】在 Ocaml 的列表中查找最大/最小数【英文标题】:Finding Max/Min number in list in 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 的函数...感谢您的帮助。

【问题讨论】:

【参考方案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 不存在。

【讨论】:

以上是关于在 Ocaml 的列表中查找最大/最小数的主要内容,如果未能解决你的问题,请参考以下文章

在列表python中查找最小和最大元素的最后一个索引

在给定条件的情况下查找列表的最小和最大索引

Python:在浮动列表中查找最小项目的索引[重复]

在用户定义的列表中查找具有最大字符数的类对象的项目

python如何查找小于9的元素

使用java编写两个方法min和max在链表中查找最大值和最小值,但输入列表是整数数组