我正在尝试在标准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
答案 0 :(得分:1)
foldr
采用类型为('a * 'b) -> 'b
的函数,类型为'b
的值和类型为['a]
的列表。在您的情况下,列表是对列表,类型'b
的值是一个空列表。这意味着函数fn (a,b) => ...
a
将是一对,b
将是一个列表。然后,您尝试使用a
比较b
和>
。由于>
无法使用一对作为其左操作数而列表作为其右操作数,因此不起作用。此外,您不能使用if语句,其中then-expression和else-expression具有不同的类型。
如果我是你,我会使用地图,这似乎比使用折叠更适合这个问题。