在 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 -> int list
类型,因为let a = max t
中的max
不是指您的函数,而是指the one defined in Stdlib
。 Stdlib
(以前称为Pervasives
)包含非常常用的定义,因此默认为您打开。
Stdlib.max
的类型为 'a -> 'a -> 'a
。因此,当您将int list
传递给它时,编译器会将'a
推断为int list
并返回一个类型为int list -> int list
的函数。
为什么max
不引用你自己的max
函数?因为您忘记了 rec
关键字。您可能已经知道,rec
使该函数可在其内部被调用。
您应该避免隐藏Stdlib
函数名称,以避免出现此类混淆错误。如果您选择了不同的名称,您只会收到一条错误消息,告诉您max
不存在。
【讨论】:
以上是关于在 Ocaml 的列表中查找最大/最小数的主要内容,如果未能解决你的问题,请参考以下文章