2016-10-21 5 views
1

私はSMLのレコードのリストから一番古い人を取得しようとしています。私は単純なリストと同じように開始しました:SMLのレコードリストから一番古い人を取得

type person = {age:int, name: string} list 

val p:person = [{age=11, name="Marco"},{age=12, name="Polo"}] 

fun maxAge [] = NONE 
    | maxAge [x] = SOME x 
    | maxAge (p1 :: p2 :: xs) = if #age(p1) > #age(p2) then 
             maxAge (p1 :: xs) 
            else 
             maxAge (p2 :: xs) 

私は、取得するには、次のエラー:私は私の場合aで、P1、P2は、リストの第一及び第二の要素だろうと思った

Error: unresolved flex record 
(can't tell what fields there are besides #age) 

名前と年齢のレコード(age = 11、name = "Marco")、そして#age(p1)で簡単に値にアクセスし、p1を完全なレコードp1をより深く再帰に送ることができたが、そうではない。どうして?

どのようなヒントも高く評価されます。

PS:どのように私は私が右のレコードを取得する場合、これが動作しないだけで名の文字列を印刷することができます。

maxAge [x] = SOME #name(x) 

答えて

1

私は問題はあなたができないパターンマッチ」ということでした、私の答えin this questionを見つけましたP1" 、レコード、代わりに、それは次のように行う必要があります。

... 
maxAge ({age= p1, name= n1} :: {age= p2, name= n2} :: xs) 
... 

次にあなたが使用できる 『P1』、 『P2』を...続行します。

+2

他にも少なくとも1つのオプションがあります:あなたの 'maxAge'関数に明示的な型を与えることができます –

関連する問題