F# 创建查找列表中最大元素的函数时出错
我希望创建一个返回给定列表中最大值的函数,下面是我所做的:F# 创建查找列表中最大元素的函数时出错,f#,F#,我希望创建一个返回给定列表中最大值的函数,下面是我所做的: let findMax aalist: 'a list= let rec helper (l:'a list,m:'a)= match m,l with |m,li::lf-> if compare m li<0 then helper (lf,li) else helper (lf,m) |m,[] -> m h
let findMax aalist: 'a list=
let rec helper (l:'a list,m:'a)=
match m,l with
|m,li::lf-> if compare m li<0 then helper (lf,li)
else helper (lf,m)
|m,[] -> m
helper(aalist, aalist.Head )
让findMax aalist:'一个列表=
let rec helper(l:a列表,m:a)=
将m、l与
|m、 li::lf->if比较m li m
助手(aalist,aalist.Head)
但我在尝试运行函数时出错:
我不知道这是否是创建此函数的最佳方法。请帮助。删除
列表
类型注释,这样您就有了:
让findMax aalist:'a=
let rec helper(l:a列表,m:a)=
将m、l与
|m,li::lf->if li>m then helper(lf,li)
else助手(左前,右后)
|m,[]->m
助手(aalist,aalist.Head)
问题在于您对参数的声明
这:
应该是:
let findMax (aalist: 'a list) =
当没有使用括号时,编译器认为您正在指定函数的返回类型。如果返回类型是'a list
,则参数aalist
必须是列表列表列表:'a list
如果您根本没有指定任何类型,编译器会将findMax
的类型正确推断为'a list->'a
规则始终是在括号内指定参数类型。看起来您的意思是
如果li>m那么helper(lf,li)…
,匹配是一个关键字。您还需要向类型参数'a
添加一个比较
约束,以及如果输入列表为空,该怎么办。我编辑了代码并将编辑问题,在整数列表上尝试该函数时仍会出错。您需要将返回类型改为a'
,而不是'a list
:让findMax aalist:'a
。您可以删除所有显式类型注释,它们将被推断。
let findMax (aalist: 'a list) =