【问题标题】:standard ml sorting 3 elements标准 ml 排序 3 个元素
【发布时间】:2012-03-22 21:19:46
【问题描述】:

我正在尝试创建一个标准的 ml 函数,该函数将 3 个元素作为输入并返回一个从最小到最大排序的排序列表。我使用了 3 个辅助方法来获取最小、最大和中间元素。代码如下:

- fun min3 (a, b, c):real = 
    if a < b andalso a < c then a
        else if b < a andalso b < c then b
        else c;

- fun mid3 (a, b, c):real = 
    if (a < b andalso a > c) orelse (a > b andalso a < c) then a
        else if (b < a andalso b > c) orelse (b > a andalso b < c) then b
        else c;

- fun max3 (a, b, c):real = 
    if a > b andalso a > c then a
    else if b > a andalso b > c then b
        else c;

- fun sort3 (a, b, c):real = 
    min3(a, b, c)::mid3(a, b, c)::max3(a, b, c)::[];

以下在处理整数时效果很好,但是当我将它们更改为实数时,辅助方法返回了正确的结果,但在键入以下排序方法时出现错误(无法复制错误文本,所以我拿了一个屏幕截图):

代码中可能有什么问题? 谢谢

另外,除了我在这里发布的方式之外,还有其他方式对 3 个元素进行排序吗?

【问题讨论】:

    标签: list sorting standards sml ml


    【解决方案1】:

    在更改类型时,您对sort3 的返回值犯了错误。错误消息告诉您,您声明 sort3 返回一个实数,而实际上它返回一个实数列表。

    【讨论】:

    • 如果我让每个元素通过辅助方法返回一个列表本身并通过@运算符将它们连接起来,它会知道返回为一个列表吗?
    • @aizen92 它已经知道它返回了一个列表。问题是您在写 fun sort3 (a, b, c):real 时明确表示它应该返回一个实数
    • 但我希望它返回真实,我想让这个方法只在真实上工作
    • 如果我从排序方法的标题中删除 :real 部分,如果我在其中使用辅助方法,它是否仍然认为它们是真实的,因为辅助方法需要实数?
    • 我尝试从排序标头中删除 :real 部分,它起作用了
    猜你喜欢
    • 2016-06-11
    • 2011-05-05
    • 2017-06-25
    • 2020-05-12
    • 2020-11-19
    • 2017-11-23
    • 2011-01-26
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多