SMLNJ - 错误:运算符域?.C列表操作数C列表

时间:2015-01-06 13:17:06

标签: sml smlnj

我在SMLNJ中有这段代码:

val reduce = fn : C list -> C list * int

datatype C =  R | G | B | Y | SR | SG | SB | SY | DR | DG | DB | DY | P | W | W';

fun exhaustiveReduce(cList)=
    let
        fun helper((cList, score), prevScore, flag)=
            if (0 = score andalso flag = true) then
                (cList,prevScore)
            else
                helper(reduce(cList), prevScore+score, true)
    in
        helper((cList, 0), 0, false)
    end

当我尝试运行以下行时:

exhaustiveReduce ([B,B,B,G,G,G,G,Y,R,R,R,Y,Y,G,G,G])

我收到此错误: enter image description here

我理解的意思是我正在尝试向函数发送一个参数 它不期望得到,但?.是什么意思?我该如何解决?

P.S。我看了一下:What does 'int ?. tree' mean in an SML error message?但是没有发现它非常有用。

由于

1 个答案:

答案 0 :(得分:1)

?.t表示t以某种方式超出了范围,例如因为它被新的定义所遮蔽(即使是相同的)。您可能已经多次在REPL中输入了类型C的定义,而您的reduce函数仍然引用了较旧的定义。只需重新输入依赖于C的所有定义(如果你想进行更严肃的开发,还可以使用SML / NJ的编译管理器)。

PS:flag = true相当于只说flag