2017-07-07 59 views
1

我寫在SML插入排序一些代碼。這裏是。SML比賽冗餘錯誤

fun compare(x:real, y:real, F) = F(x, y); 
fun isEqual(x:real, y:real) = ((x <= y) andalso (x >= y)); 

fun rinsert(x: real, L: real list, F) = [x] 
    |rinsert(x, (y::ys), F) = 
    if isEqual(x, y) then rinsert (x, ys, F) 
    else if compare(x, y, F) then x::y::ys 
      else y::(rinsert (x, ys, F)); 

fun rinsort(L : real list, F) = [] 
    |rinsort(x::xs, F) = rinsert(x, (rinsort (xs, F), F); 

無論出於何種原因,我一直想出這個錯誤

- val compare = fn : real * real * (real * real -> 'a) -> 'a                                   
val isEqual = fn : real * real -> bool                                         
stdIn:4.6-8.42 Error: match redundant                                         
      (x,L,F) => ...                                            
    --> (x,y :: ys,F) => ... 

我明白它說,我有一個重複的行地方,但我不知道問題出在哪裏能是。

回答

2

rinsert第一行會爲每個數普通的變量,因此相匹配的一切。因此,第二種情況從未達到。 rinsort

要解決此問題,您需要將L參數替換爲[]的空白列表模式。

+0

謝謝!那個錯誤消失了 – small502