12
標準SML庫函數Int.toString在前綴爲~
的負數而不是-
。是否有一個庫函數使用-
代替,短篇寫作如何將負整數轉換爲SML中帶有負號而不是波浪號的字符串?
fun i2s i =
if i < 0 then "-"^Int.toString (~i) else Int.toString i
標準SML庫函數Int.toString在前綴爲~
的負數而不是-
。是否有一個庫函數使用-
代替,短篇寫作如何將負整數轉換爲SML中帶有負號而不是波浪號的字符串?
fun i2s i =
if i < 0 then "-"^Int.toString (~i) else Int.toString i
的一句話,第
SML設計使用~
爲一元減,以避免與-
(二進制負)混淆。當每個運營商只有一個用途時,這是一個明智的決定,SML用戶必須接受這一點。
雖然讀取以~
開頭的整數的字符串表示很奇怪,但沒有庫函數可以將它轉換爲常規約定中的字符串。順便說一下,你的功能是一個很好的方法。
請注意,在某些情況下,您的函數將導致OverflowError,因爲在典型體系結構中,可表示最小的整數的幅度大於最大可表示整數。 (例如,32位二進制補碼有符號整數範圍從〜2147483648到2147483647.)這可能會或可能不會被您的使用情況所接受。如果它*不是可接受的,那麼一種選擇是'fun i2s i = String.map(fn#「〜」=>#「 - 」| c => c)(Int.toString i)'。 – ruakh