【问题标题】:max pairs function standard ml最大对函数标准 ml
【发布时间】:2012-05-03 21:32:37
【问题描述】:

我正在尝试在标准 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

【问题讨论】:

    标签: function max sml ml


    【解决方案1】:

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

    如果我是你,我会为此使用 map,这似乎比使用折叠更能解决问题。

    【讨论】:

    • 哦,好的,我明白了它适用于地图功能非常感谢 sepp2k
    猜你喜欢
    • 2016-01-19
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多