最大对功能标准ml

时间:2012-03-25 08:59:54

标签: function max sml ml

我正在尝试在标准ml中创建一个带有一对int的列表的函数,我应该返回一个包含对中max元素的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 个答案:

答案 0 :(得分:1)

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

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