2011-11-19 21 views
12

標準SML庫函數Int.toString在前綴爲~的負數而不是-。是否有一個庫函數使用-代替,短篇寫作如何將負整數轉換爲SML中帶有負號而不是波浪號的字符串?

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

請注意,在某些情況下,您的函數將導致OverflowError,因爲在典型體系結構中,可表示最小的整數的幅度大於最大可表示整數。 (例如,32位二進制補碼有符號整數範圍從〜2147483648到2147483647.)這可能會或可能不會被您的使用情況所接受。如果它*不是可接受的,那麼一種選擇是'fun i2s i = String.map(fn#「〜」=>#「 - 」| c => c)(Int.toString i)'。 – ruakh

回答

7

的一句話,第

SML設計使用~爲一元減,以避免與-(二進制負)混淆。當每個運營商只有一個用途時,這是一個明智的決定,SML用戶必須接受這一點。

雖然讀取以~開頭的整數的字符串表示很奇怪,但沒有庫函數可以將它轉換爲常規約定中的字符串。順便說一下,你的功能是一個很好的方法。

相關問題