2015-10-04 14 views
5

Tôi mới dùng F # và viết một số thuật toán đơn giản để làm quen với ngôn ngữ, cần argMax. Thư viện chuẩn có đi kèm với một hàm để tìm kiếm phần tử danh sách tối đa hóa một hàm không? Tức là, nếu có một chức năng hiện có hoạt động như thế này:Thư viện F # có hàm chuẩn cho `argMax` không?

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' 

Trả lời

9

Có, nhưng được gọi là List.maxBy.

Dưới đây là một ví dụ:

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

f 50 
// val it : int = 3500 

Ngoài ra còn có List.minBy và các chức năng tương tự có sẵn cho SeqArray.

Các vấn đề liên quan