2011-11-19 14 views
12

La función de biblioteca SML estándar Int.toString prefijos números negativos con ~ en lugar de -. ¿Hay una función de biblioteca para usar - lugar, a falta de la escrituraCómo convertir enteros negativos a cadenas en SML con el signo menos en lugar de tilde?

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

Tenga en cuenta que su función dará como resultado OverflowError en algunos casos, ya que en arquitecturas típicas, el número entero menos representable tiene mayor magnitud que el entero más grande representable. (Por ejemplo, los enteros con signo de dos complementos de 32 bits tienen un rango de ~ 2147483648 a 2147483647). Eso puede o no ser aceptable para su caso de uso. Si * no es * aceptable, entonces una alternativa es 'diversión i2s i = String.map (fn #" ~ "=> #" - "| c => c) (Int.toString i)'. – ruakh

Respuesta

7

En resumen, Nº

SML está diseñado para utilizar ~ de menos unitario para evitar confusiones con - (menos binario). Es una decisión sensata cuando tienes a cada operador con un solo propósito y los usuarios de SML tienen que vivir con eso.

Aunque es extraño leer una representación de cadena de un entero que comienza con ~, no hay función de biblioteca para convertirla a una cadena en la convención normal. Por cierto, tu función es una buena manera de hacerlo.

Cuestiones relacionadas