2016-11-13 32 views
2

私はF#に新たなんだと私は構造の最大の要素フォームリストを見つけたいのリストで最大の要素を見つけます。F#は、構造

let max2 x y = if x.RES < y.RES then y else x //BAD LINE 

let max_list list = 
    let rec loop hi list = 
     match list with 
     | h::t -> loop (max2 h hi) t 
     | [] -> hi 
    match list with 
    | h::t -> loop h t 
    | [] -> invalidArg "list" "Empty list" 

およびコール:

:この呼び出しは、2つのエラーが発生し
let list = findPalindromes 1 1 List.empty //this call populates the "list" 
printfn "%A" (max_list list) 

がライン// BAD LINE IN( x.RESy.RESを指して)私はいくつかのコードを書きました

エラーFS0072:このプログラムポイントより前の情報に基づいて不定型のオブジェクトを検索します。オブジェクトのタイプを制約するために、このプログラムポイントの前に型注釈が必要な場合があります。これにより、ルックアップが解決される可能性があります。

私はElementにxとyをキャストしなければならないことを知っています。

このコードを修正したり、この機能を他の方法で実装するにはどうすればよいですか? F#の標準ライブラリは、これが内蔵されてい

+0

は、あなたがしようとしたものを、私たちを表示します。 –

答えて

3

List.maxBy:あなたはmax2で取得しているエラーについては

findPalindromes 1 1 List.empty 
|> List.maxBy (fun e -> e.RES) 
|> printfn "%A" 

、型注釈は、それを解決:

let max2 (x:Element) (y:Element) = if x.RES < y.RES then y else x