【问题标题】:SMLNJ - error: operator domain ?.C list operand C listSMLNJ - 错误:运算符域 ?.C 列表操作数 C 列表
【发布时间】:2015-01-06 23:07:06
【问题描述】:

我在 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])

我收到此错误:

我明白意思是我试图向函数发送一个参数 它不希望得到,但?. 是什么意思?我该如何解决?

附:我看了这里:What does 'int ?. tree' mean in an SML error message?,但没有发现它很有用。

谢谢

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

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

    PS:flag = true 相当于只是说flag

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多