F# list.fold 最大值
F# list.fold maximum
我想在 F# 中使用一个新的内置函数 (list.fold)。我有一个包含数字的列表,我必须 return 它的最大值。如果列表为空,它应该为 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
我想在 F# 中使用一个新的内置函数 (list.fold)。我有一个包含数字的列表,我必须 return 它的最大值。如果列表为空,它应该为 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