2015-10-04 16 views
5

F # 'da yeniyim ve argMax' a ihtiyaç duyan dile alışmak için basit bir algoritma yazıyorum. Standart kitaplık, bir işlevi en üst düzeye çıkaracak bir liste öğesi aramak için bir işleve sahip mi?F # kütüphanesinde "argMax" için standart bir işlev var mı?

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' 

cevap

9

Evet ama List.maxBy denir: Oradaki bunun gibi davranır varolan işlevi ise vardır.

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

f 50 
// val it : int = 3500 

Orada da List.minBy ve aynı fonksiyonları Seq ve Array için kullanılabilir:

İşte bir örnek.

İlgili konular