【问题标题】:The 'op' operator in SMLSML 中的“op”运算符
【发布时间】:2019-02-22 02:47:17
【问题描述】:

所以我遇到了op 运算符,但我没有得到pupurse。

我定义了两个函数:

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 背后的想法是什么?

【问题讨论】:

    标签: sml


    【解决方案1】:

    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)) *)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 2012-09-25
      • 1970-01-01
      • 2012-12-17
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      相关资源
      最近更新 更多