2015-10-04 57 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和相同的功能可用於SeqArray

相關問題