2012-03-25 49 views
0

我试图做一个函数在标准毫升,需要一对int值的列表,我应该返回一个int列表,其中包含来自对的最大元素。 (int * int) list -> int list。到目前为止,我已经编写了一个代码,但它不起作用,我似乎无法从它给出的错误中找出问题。最大对函数标准毫升

下面的代码:

- fun maxpairs x = 
= foldr (fn (a, b) => if a > b then a else b) [] x; 

这里就是我得到的错误:

stdIn:15.2-15.50 Error: operator and operand don't agree [overload] 
    operator domain: 'Z 
    operand:   'Y list 
    in expression: 
    (foldr (fn (<pat>,<pat>) => if <exp> then <exp> else <exp>)) nil 

回答

1

foldr需要('a * 'b) -> 'b类型的函数,'b类型的值和['a]类型的列表。在你的情况下,该列表是一个对列表,值类型'b是一个空列表。这意味着在功能fn (a,b) => ...a将是一对和b将是一个列表。然后尝试使用>比较ab。由于>不能与其左操作数和列表作为其右操作数一起使用,因此不起作用。你也不能有一个if语句,其中then-expression和else-expression具有不同的类型。

如果我是你,我会用这个地图,这似乎比使用折叠更适合这个问题。

+0

哦好吧,我看到 它与地图功能 非常感谢sepp2k – 2012-03-25 09:52:08