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