【问题标题】:Why is there type mismatch of operator and operand?为什么运算符和操作数的类型不匹配?
【发布时间】:2012-09-25 15:06:12
【问题描述】:

为什么会出现 tycon mismatch operator and operand do not agree 错误?有什么解决方案的建议吗?

fun reve (x:string) = implode o rev o explode x

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    问题在于,函数应用绑定比o强。

    即解释为:

    fun reve x = implode o rev o (explode x);
    

    由于explode xchar list 而不是函数,所以这将失败。

    您可以通过正确放置括号来解决此问题

    fun reve x = (implode o rev o explode) x;
    

    或者用无点符号来写:

    val reve = implode o rev o explode
    

    还可以定义一个右关联函数应用运算符,通常称为$,它可以在没有括号的情况下执行您想要的操作:

    (* Right-associative function application *)
    infixr $
    fun f $ x = f x;
    
    fun reve x = implode o rev o explode $ x
    

    【讨论】:

      猜你喜欢
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多