因此,我遇到了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
背后的想法是什么?
答案 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)) *)