错误SML:未绑定的变量或构造函数

时间:2018-03-03 03:46:06

标签: sml

我是SML的新手。我尝试在下面创建并测试以下函数,但是我收到了一个错误。我不知道是什么问题。

fun isOld(pFirstTuple: int*int*int, pSecondTuple: int*int*int) = 
    if (#1 pFirstTuple) < (#1 pSecondTuple)
    then 
        true
    if (#1 pFirstTuple) = (#1 pSecondTuple)
    then 
        if (#2 pFirstTuple) < (#2 pSecondTuple)
        then
            true

    else
        false

我已尝试过此命令&#34; val p = isOld((8,9,10),(10,11,12))&#34;,但它显示以下错误未绑定变量或构造函数。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

以下是您的代码的样子,通过忽略各种子表达式(用ABC替换它们来删除)

if A
then true
if B
then if C
     then true
else false

您正在广泛使用if / then / else,但语法不太正确。在SML中,每个if 必须同时包含then else子句。这是我对你的真实含义的猜测:

if A
then true
else if B
then if C
     then true
     else false
else false

这开始变得非常混乱---但你可以用布尔逻辑来清理它。请注意,例如,if X then true else false与简单地编写X完全相同,因为两个表达式都是bool类型,并且总是计算为相同的布尔值,而不管{{1}是的。您可以扩展此推理以查看

  1. X相当于if X then true else Y
  2. X orelse Y相当于if X then Y else false
  3. 有了这些想法,我们可以大大清理你的代码:

    X andalso Y