我希望创建一个在给定列表中返回最大值的函数,这是我所做的:
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 )
但是尝试运行该函数时出现错误:
我不知道这是否是创建此功能的最佳方法。请帮忙。
答案 0 :(得分:2)
删除list
类型的注释,因此您将拥有以下内容:
let findMax aalist: 'a =
let rec helper (l:'a list,m:'a) =
match m,l with
| m,li::lf -> if li > m then helper (lf,li)
else helper (lf,m)
| m,[] -> m
helper(aalist, aalist.Head)
答案 1 :(得分:0)
问题出在您的参数声明中。
此:
let findMax aalist: 'a list=
应为:
let findMax (aalist: 'a list) =
不使用括号时,编译器会认为您正在指定函数的返回类型。如果返回类型为'a list
,则参数aalist
必须是列表列表:'a list list
。
如果根本不指定任何类型,则编译器会正确地将findMax
的类型推导为'a list -> 'a
。
规则始终是在括号内指定参数类型。