2011-06-12 29 views
1
exception div; 
fun f(x,y) = 
    let 
     val before = 2.0 * x + 3.0 * y 
    in 
     (before + (1.0/(if x > 0.0001 then x else raise div)) + 2.0/y) handle div => before/6.0 
    end 

此代码会产生一些编译错误。标准ML,中缀标识符ERROR代码

e.sml:4.8-4.14 Error: expression or pattern begins with infix identifier "before"
e.sml:6.8-6.14 Error: expression or pattern begins with infix identifier "before"
e.sml:6.57-6.60 Error: expression or pattern begins with infix identifier "div"
e.sml:6.81-6.84 Error: expression or pattern begins with infix identifier "div"
e.sml:6.88-6.94 Error: expression or pattern begins with infix identifier "before"

为什么这个错误发生? 我没有使用中缀代码,只是使用变量和异常。

回答

1

beforediv是在SML的Basis库中定义的中缀运算符,因此您不能将它们用作变量或异常的名称,并首先覆盖它们的中缀声明。

+0

谢谢。这是如此微小的问题。 – manut 2011-06-12 07:20:49

+1

其实,你可以,但你必须用'nonfix'关键字去除他们的中缀状态。但是,这是不好的做法,并且使用其他名称是非常受欢迎的。此外,已经有一个由零例外的除法,称为Div,为什么不使用它呢? – margnus1 2011-06-12 13:57:27