【问题标题】:How to convert negative integers to strings in SML with minus sign instead of tilde?如何使用减号而不是波浪号将负整数转换为 SML 中的字符串?
【发布时间】:2012-01-01 19:30:45
【问题描述】:

标准 SML 库函数 Int.toString 以 ~ 而不是 - 作为负数前缀。有没有库函数可以改用-,没写完

fun i2s i =
    if i < 0 then "-" ^ Int.toString (~i) else Int.toString i

【问题讨论】:

  • 请注意,您的函数在某些情况下会导致 OverflowError,因为在典型架构中,最小可表示整数的幅度大于最大可表示整数。 (例如,32 位二进制补码有符号整数的范围从 ~2147483648 到 2147483647。)您的用例可能会也可能不会接受。如果它可以接受,那么另一种选择是fun i2s i = String.map (fn #"~" =&gt; #"-" | c =&gt; c) (Int.toString i)

标签: sml smlnj


【解决方案1】:

简而言之,没有。

SML 旨在将~ 用于一元减号,以避免与-(二进制减号)混淆。当您让每个操作员仅用于一个目的并且 SML 用户必须忍受这种情况时,这是一个明智的决定。

虽然读取以~ 开头的整数的字符串表示形式很奇怪,但没有库函数可以将其转换为正常约定中的字符串。顺便说一句,您的功能是这样做的好方法。

【讨论】:

    猜你喜欢
    • 2020-03-13
    • 2012-10-20
    • 2016-08-05
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2011-04-17
    相关资源
    最近更新 更多