2011-11-19 16 views
12

La funzione di libreria SML standard Int.toString prefissa i numeri negativi con ~ anziché -. C'è una funzione di libreria da utilizzare - invece, a corto di scritturaCome convertire gli interi negativi in ​​stringhe in SML con segno meno invece di tilde?

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

Si noti che la propria funzione genererà OverflowError in alcuni casi, poiché su architetture tipiche, il numero minimo rappresentabile ha un'ampiezza maggiore del più grande numero intero rappresentabile. (Ad esempio, gli interi con segno del complemento a due a 32 bit vanno da ~ 2147483648 a 2147483647.) Che può essere o non essere accettabile per il vostro caso d'uso. Se * non è * accettabile, allora un'alternativa è 'fun i2s i = String.map (fn #" ~ "=> #" - "| c => c) (Int.toString i)'. – ruakh

risposta

7

Insomma, n

SML è progettato per utilizzare ~ per meno unario per evitare confusione con - (meno binario). È una decisione sensata quando si dispone di ciascun operatore per un solo scopo e gli utenti SML devono convivere con questo.

Sebbene sia strano leggere una rappresentazione di stringa di un intero che inizia con ~, non esiste alcuna funzione di libreria per convertirla in una stringa nella normale convenzione. A proposito, la tua funzione è un buon modo per farlo.

Problemi correlati