如何在整数列表中找到最小值?

时间:2012-10-16 15:09:13

标签: sml

fun min [] = [] | min (h::t) = if h < (min t) then h else (min t)

为什么上面给出了错误? 请帮忙! 谢谢!

错误消息:

stdIn:1.37 Error: overloaded variable not defined at type
    symbol: <
    type: 'Z list

2 个答案:

答案 0 :(得分:1)

如果是空列表,则返回一个空列表,其类型与hmin t等元素的类型不兼容。

一些更正:

  1. 空列表是一种例外情况,您没有最小值。你应该提出例外,例如Empty
  2. 您忘记了仅包含一个元素的列表的基本案例。
  3. 因此函数的骨架将是:

    fun min [] = raise Empty
      | min [x] = ...
      | min (x::xs) = ...
    

答案 1 :(得分:0)

在这种情况下,最好利用选项类型。您将避免必须处理异常,但无论您从何处调用此函数,都将被强制处理NONE案例。

fun smallest [] = NONE
  | smallest (x::xs) = case smallest xs of
                       NONE => SOME x
                     | SOME y => if x < y
                                 then SOME x
                                 else SOME y