ML中的中缀操作符

infix operator 是一个写在它的两个参数中间的函数。ML中可以自己定义中缀操作符。

例:声名异或操作符

infix xor; (*xor是函数名*)

fun (p xor q) = (p orelse q) andalso not (p andalso q);

得到:

> val xor = fn : (bool * bool) -> bool

此处定义的xor函数是以一个布尔序偶为参数,返回布尔结果。

通常名字必须先被指定为中缀,然后才能定义它的值。

中缀的优先级

ML的infix可以声名一个从0~9的优先级。默认优先级为0。指令infix是左结合的,二infixr则规定是右结合。

infix 6 plus;

fun (a plus b) = a + b;

> val plus = fn : int * int -> int

将中缀作为函数

关键字op覆盖中缀状态。

op+(2,3);

> val it = 5 : int

中缀状态也可以取消,指令nonfix可以让操作符回到普通函数的记法,infix指令又可以将其变为一个中缀操作符。

nonfix *;

3*2;

> Error:  operator is not a function

*(3,2);
> val it = 6 : int

 

你可能感兴趣的:(ML中的中缀操作符)