Есть ли в библиотеке F# стандартная функция для argMax?
Я новичок в 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'
1 ответ
Решение
Да, но это называется 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
,