Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 创建查找列表中最大元素的函数时出错_F# - Fatal编程技术网

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) =