0

我正在尝试在标准 ml 中创建一个函数,该函数需要一个整数对列表,并且我应该返回一个包含整数对的最大元素的整数列表。(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
4

1 回答 1

1

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

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

于 2012-03-25T09:47:52.243 回答