2015-10-04 3 views
5

Ich bin neu in F # und schreibe einen einfachen Algorithmus, um mich an die Sprache zu gewöhnen, die argMax benötigt. Verfügt die Standardbibliothek über eine Funktion, um nach einem Listenelement zu suchen, das eine Funktion maximiert? Das heißt, wenn es eine vorhandene Funktion, die wie dieses Verhalten:Hat die F # -Bibliothek eine Standardfunktion für `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' 

Antwort

9

Ja, aber es ist List.maxBy genannt.

Hier ist ein Beispiel:

let f x = -(x * x) + 100 * x + 1000 
List.maxBy f [0..1000] 
// val it : int = 50 

f 50 
// val it : int = 3500 

Es gibt auch List.minBy und die gleichen Funktionen zur Verfügung stehen für Seq und Array.

Verwandte Themen