在标准ML中重新定义隐式标识符

时间:2018-12-15 23:50:27

标签: scope sml

我想定义函数div,但得到异常类型的

Error: expression or pattern ends with infix identifier "div"

据我了解,div不是关键字,而是常规函数。还是我错了?如果是这样,应该可以重新定义此功能。我可以从范围中删除标识符吗? Haskell中是否有类似NoImplicitPrelude的东西?

更新

然后问题采取这种形式:如何删除中缀状态?

2 个答案:

答案 0 :(得分:2)

要将前缀标识符用作非前缀,必须将关键字op放在前面。例如:

val op + = 0
val op div = op *
fun op + (x, y) = op @ (y, x)
fun op div (x, y) = x * y

fun语法还允许按原样使用中缀运算符定义

fun x / y = x * y

首先,您还可以定义自己的中缀运算符:

infix ++
fun x ++ y = (x + y) - 1

infix times
fun x times y = x * y

编辑:您也可以通过声明nonfix来删除中缀状态:

nonfix div
fun div x = 1/x

答案 1 :(得分:0)

another question

找到了解决方案
type elem = {tag:string, attrs: (string*string) list}
nonfix div
fun div attrs : elem = {tag = "div", attrs = attrs}