创建函数以查找列表中最大的元素时出错

时间:2018-12-28 23:58:31

标签: 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
    helper(aalist, aalist.Head )

但是尝试运行该函数时出现错误:

enter image description here

我不知道这是否是创建此功能的最佳方法。请帮忙。

2 个答案:

答案 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

规则始终是在括号内指定参数类型。