我试图从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)
我得到以下错误:
Error: unresolved flex record
(can't tell what fields there are besides #age)
我认为p1和p2将是列表的第一个和第二个元素,在我的例子中,是一个名和年龄{age=11,name=“Marco”}的记录,我可以通过#age(p1)轻松地访问值,然后将完整记录p1发送到递归中,但事实并非如此。为什么?
任何提示将不胜感激。
PS:当我得到正确的记录时,如何只打印名称字符串,这不起作用:
maxAge [x] = SOME #name(x)