如何在SML中用减号而不是波浪号将负整数转换为字符串?

如何在SML中用减号而不是波浪号将负整数转换为字符串?,sml,smlnj,Sml,Smlnj,标准SML库函数Int.toString在负数前面加上~,而不是-。是否有一个库函数可以代替-,而不需要编写 fun i2s i = if i < 0 then "-" ^ Int.toString (~i) else Int.toString i fun i2s i= 如果i#“-”| c=>c)(Int.toString i)。

标准SML库函数Int.toString在负数前面加上
~
,而不是
-
。是否有一个库函数可以代替
-
,而不需要编写

fun i2s i =
    if i < 0 then "-" ^ Int.toString (~i) else Int.toString i
fun i2s i=
如果i<0,则“-“^Int.toString(~i)else Int.toString i
简言之,没有

SML设计为使用
~
进行一元减号,以避免与
-
(二进制减号)混淆。当每个运营商只有一个目的,而SML用户必须接受这一点时,这是一个明智的决定


虽然读取以
~
开头的整数的字符串表示形式很奇怪,但是没有库函数将其转换为常规的字符串。顺便说一句,函数是一种很好的方法。

请注意,函数在某些情况下会导致溢出错误,因为在典型的体系结构中,最小可表示整数的大小大于最大可表示整数的大小。(例如,32位二补有符号整数的范围从~2147483648到2147483647。)这对于您的用例可能是可接受的,也可能是不可接受的。如果不能接受,那么另一种选择是
funi2s i=String.map(fn#“~”=>#“-”| c=>c)(Int.toString i)