2015-10-04 6 views
5

Я новичок в 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' 

ответ

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.