2012-10-16 63 views
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 
+0

什麼是錯誤? –

+0

@RB。 'stdIn:1.37錯誤:未定義類型爲 的重載變量符號:< 類型:'Z列表' 對不起,不知道爲什麼這裏沒有換行符 – sc1013

+0

oops對於輸入錯誤:-) – sc1013

回答

1

在空列表的情況下,將返回一個空的列表,其類型與類型元件如hmin t不兼容。

一些更正:

  1. 空單是你沒有的最小值一個特例。您應該舉例說明,例如Empty
  2. 您忘記了只包含一個元素的列表的基本情況。

因此函數的骨架是:

fun min [] = raise Empty 
    | min [x] = ... 
    | min (x::xs) = ... 
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 
相關問題