2015-10-04 17 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と呼ばれています:それは、この1と同じように動作し、既存の機能があります場合、です。ここで

は例です:

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のために用意されています。

関連する問題