我是F#的新手,并编写了一些简单的算法来习惯这种需要argMax
的语言。标准库是否具有搜索最大化函数的列表元素的功能?也就是说,如果现有的函数表现得像这样:
let argMax f xs =
let rec go a fa zs =
match zs with
| [] -> a
| z :: zs' ->
let fz = f z
if fz > fa
then go z fz zs'
else go a fa zs'
match xs with
| [] -> invalidArg "xs" "empty"
| x :: xs' -> go x (f x) xs'
答案 0 :(得分:9)
是的,但它被称为List.maxBy
。
以下是一个例子:
let f x = -(x * x) + 100 * x + 1000
List.maxBy f [0..1000]
// val it : int = 50
f 50
// val it : int = 3500
还有List.minBy
,Seq
和Array
可以使用相同的功能。