gpt4 book ai didi

recursion - 在Ocaml列表中查找最大/最小编号

转载 作者:行者123 更新时间:2023-12-02 10:51:10 25 4
gpt4 key购买 nike

我最近才开始学习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;;

奥卡姆一直在说:

Error: This expression has type int list -> int list but an expression was expected of type int.



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

最佳答案

a的类型为int list -> int list,因为max中的let a = max t并不引用您的函数,而是引用the one defined in Stdlib Stdlib(以前称为Pervasives)包含非常常用的定义,因此默认情况下会为您打开。
Stdlib.max的类型为'a -> 'a -> 'a。因此,当您将其传递给int list时,编译器会推断'aint list并返回类型为int list -> int list的函数。

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

您应该避免隐藏Stdlib函数名称,以免引起混淆。如果您选择了其他名称,则只会收到一条错误消息,告诉您max不存在。

关于recursion - 在Ocaml列表中查找最大/最小编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com