Recursion 在Ocaml中查找列表中的最大/最小值
我最近刚开始学习Ocaml,现在刚开始练习一些代码。 在这种情况下,我试图在列表中找到一个最大值,但它总是返回一条错误消息Recursion 在Ocaml中查找列表中的最大/最小值,recursion,compiler-errors,ocaml,Recursion,Compiler Errors,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;; 让max
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;;
让max:int列表->int
=乐趣lst->
匹配lst与
|[] -> 0
|h::[]->h
|h::t->让a=最大t进入
如果h
Ocaml一直在说:
错误:此表达式的类型为int list->int list,但表达式的类型应为int
我不明白为什么a是一个整型列表,虽然我声称它是一个最大t,这是一个函数,使整型列表成为整型。。。感谢您的帮助。
a
具有类型int list->int list
,因为中的max
让a=max t
不引用您的函数,而是引用Stdlib
(以前称为pervisives
)包含非常常用的定义,因此默认情况下为您打开
Stdlib.max
的类型为'a->'a->'a
。因此,当您传递一个int list
时,编译器将'a
推断为int list
,并返回一个类型为int list->int list
的函数
为什么max
不引用您自己的max
功能?因为您忘记了rec
关键字。您可能已经知道,rec
使函数可以在其内部调用
您应该避免隐藏Stdlib函数名,以避免类似这样的混淆错误。如果您选择了不同的名称,您只会得到一个错误,告诉您
max
不存在。a
具有类型int list->int list
,因为中的max
让a=max t
不是指您的函数,而是指Stdlib
(以前称为pervisives
)包含非常常用的定义,因此默认情况下为您打开
Stdlib.max
的类型为'a->'a->'a
。因此,当您传递一个int list
时,编译器将'a
推断为int list
,并返回一个类型为int list->int list
的函数
为什么max
不引用您自己的max
功能?因为您忘记了rec
关键字。您可能已经知道,rec
使函数可以在其内部调用
您应该避免隐藏Stdlib函数名,以避免类似这样的混淆错误。如果您选择了不同的名称,您只会得到一个错误,告诉您max
不存在