2017-07-07 79 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