SML中的“ op”运算符

时间:2019-02-21 17:20:48

标签: sml

因此,我遇到了op运算符,但没有收到。

我定义了两个功能:

fun op pow1 (x,y) = Math.pow (x,y);
fun pow2 (x,y) = Math.pow (x,y);

它们都具有相同的签名:

val pow1 = fn : real * real -> real
val pow2 = fn : real * real -> real

它们都具有相同的函数调用:

pow1 (5.0,6.0);
> val it = 15625.0 : real
pow2 (5.0,6.0);
> val it = 15625.0 : real

那么这两个功能有什么区别? op背后的想法是什么?

1 个答案:

答案 0 :(得分:2)

op关键字撤消以下(字母数字或符号)标识符的中缀状态。例如:

val n = op+ (1, 2)            (* equivalent to: val n = 1 + 2 *)
val m = op mod (5, 6)         (* equivalent to: val m = 5 mod 6 *)
fun op+ (x, y) = x - y        (* equivalent to: fun x + y = x - y *)

否则这些行将是语法错误。

当引用普通中缀函数而没有立即调用它时(例如,将其传递给高阶函数时),这很有用。例如:

List.foldr op+ 0 [1, 2, 3]    (* equivalent to: 1 + (2 + (3 + 0)) *)