Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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#list.fold最大值_List_F#_Max_Fold - Fatal编程技术网

F#list.fold最大值

F#list.fold最大值,list,f#,max,fold,List,F#,Max,Fold,我想在F#中使用一个新的内置函数(list.fold)。我有一个包含数字的列表,我必须返回其中的最大值。如果列表为空,则应为0。我试着用这种方法来解决这个问题: let max a b : Nat = if a > b then a else b let maxofList = List.fold max let maximum (xs: Nat list): Nat = maxofList xs 我无法编译它,也不知道如何用另一种方式解决它,也许我只是不太了解内置函数是如何工作的。输

我想在F#中使用一个新的内置函数(list.fold)。我有一个包含数字的列表,我必须返回其中的最大值。如果列表为空,则应为0。我试着用这种方法来解决这个问题:

let max a b : Nat = if a > b then a else b
let maxofList = List.fold max
let maximum (xs: Nat list): Nat = maxofList xs 
我无法编译它,也不知道如何用另一种方式解决它,也许我只是不太了解内置函数是如何工作的。输入如下所示:

maximum [12N; 4N; 67N; 5N] = 67N

正如注释中所指出的,您使用的是
Nat
类型,这是您正在使用的库中某个地方定义的自定义类型,而不是标准的F#类型,这有点令人困惑。您应该能够使用
Nat
类型使事情正常工作,但我将简化事情并使用整数

现在,您的代码几乎是正确的。唯一的问题是,
List.fold
需要一个函数来组合当前状态和下一个元素(即您的
max
),但它还需要一个初始状态。这应该是列表中最小的数字。如果只有正数,则可以使用零:

let max a b : int = if a > b then a else b
let maxofList = List.fold max 0 // Added '0' as an extra parameter here!
let maximum (xs: int list): int = maxofList xs
在您的情况下,这可能是
0N
。或者,您可以使用
List.reduce
,它将列表的第一个元素作为初始值,如果列表为空,则会失败:

let maxofList = List.reduce max

正如注释中所指出的,您使用的是
Nat
类型,这是您正在使用的库中某个地方定义的自定义类型,而不是标准的F#类型,这有点令人困惑。您应该能够使用
Nat
类型使事情正常工作,但我将简化事情并使用整数

现在,您的代码几乎是正确的。唯一的问题是,
List.fold
需要一个函数来组合当前状态和下一个元素(即您的
max
),但它还需要一个初始状态。这应该是列表中最小的数字。如果只有正数,则可以使用零:

let max a b : int = if a > b then a else b
let maxofList = List.fold max 0 // Added '0' as an extra parameter here!
let maximum (xs: int list): int = maxofList xs
在您的情况下,这可能是
0N
。或者,您可以使用
List.reduce
,它将列表的第一个元素作为初始值,如果列表为空,则会失败:

let maxofList = List.reduce max

我也不能编译它;您在哪里找到类型
Nat
?忽略这一点,您的第三行(或者第二行)缺少折叠的初始值。如果
Nat
是一种反映自然数的类型(从1开始),那么
1N
就可以了。我想用Nat表示自然数,但可能我的整个代码都错了。我想用另一种方法来尝试,使用“match x with”函数,但我不知道如何正确地编写它;您在哪里找到类型
Nat
?忽略这一点,您的第三行(或者第二行)缺少折叠的初始值。如果
Nat
是一种反映自然数的类型(从1开始),那么
1N
就可以了。我想用Nat表示自然数,但可能我的整个代码都错了。我想用另一种方式尝试它,使用“match x with”函数,但我不知道如何正确编写。值得一提的是还有List.max(和List.maxBy):值得一提的是还有List.max(和List.maxBy):