0
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
4

2 回答 2

1

在空列表的情况下,您返回一个空列表,其类型与元素的类型不兼容,例如hor min t

一些更正:

  1. 空列表是您没有最小值的例外情况。你应该提出一个例外,例如Empty
  2. 您忘记了仅包含一个元素的列表的基本情况。

所以函数的骨架是:

fun min [] = raise Empty
  | min [x] = ...
  | min (x::xs) = ...
于 2012-10-16T16:11:26.470 回答
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
于 2014-10-15T14:37:09.830 回答