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

克莱特

最近刚开始学习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 的函数……谢谢你的帮助。

格伦斯尔

a具有类型,int list -> int list因为maxinlet a = max t不是指您的函数,而是指在Stdlib. Stdlib(以前称为Pervasives)包含非常常用的定义,因此默认情况下为您打开。

Stdlib.max有类型'a -> 'a -> 'a因此,当您传递 an 时int list,编译器会推断'aint list并返回一个类型为 的函数int list -> int list

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

您应该避免隐藏Stdlib函数名称以避免混淆这样的错误。如果您选择了不同的名称,您只会收到一个错误,告诉您该名称max不存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章