Sml 为什么运算符和操作数的类型不匹配?
为什么存在tycon不匹配运算符和操作数不一致错误?有什么解决办法的建议吗Sml 为什么运算符和操作数的类型不匹配?,sml,smlnj,Sml,Smlnj,为什么存在tycon不匹配运算符和操作数不一致错误?有什么解决办法的建议吗 fun reve (x:string) = implode o rev o explode x 问题在于,函数应用程序绑定比o更强 也就是说,它被解释为: fun reve x = implode o rev o (explode x); 由于explode x是一个char list而不是一个函数,因此此操作将失败 您可以通过正确放置括号来解决此问题 fun reve x = (implode o rev o ex
fun reve (x:string) = implode o rev o explode x
问题在于,函数应用程序绑定比
o
更强
也就是说,它被解释为:
fun reve x = implode o rev o (explode x);
由于explode x
是一个char 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