2017-07-07 2 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の最初の行には、各引数に明示的な変数があるため、すべてが一致します。その結果、第2のケースには決して到達しない。 rinsortと同じです。

これを修正するには、パラメータを両方とも空のリストのパターン[]に置き換える必要があります。

+0

ありがとうございました!そのエラーはなくなった – small502