【问题标题】:SML Match Redundant ErrorSML 匹配冗余错误
【发布时间】:2017-07-07 04:01:47
【问题描述】:

我正在为 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) => ...   

我明白它在说什么,我在某处有一条重复的线,但我不确定问题可能出在哪里。

【问题讨论】:

    标签: sml smlnj redundancy


    【解决方案1】:

    rinsert 的第一行对每个参数都有简单的变量,因此匹配所有内容。因此,永远无法达到第二种情况。 rinsort 也一样。

    要解决此问题,您需要将两者中的 L 参数替换为空列表的模式 []

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多