如何在 SML 中递归地将整数转换为字符串?

问题描述

我制作了一个非常小的程序,它接受一个 int 并将其转换为 SML 中的字符串:

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


int2str(~1234) --> "~1234"
int2str(1234)  --> "1234"

我一直在努力以递归方式完成这项工作。有什么帮助吗?此外,我必须将一个字符串转换一个 int,我通常通过 stackOverflow 帮助完成了该操作,但是“~”也将所有内容都搞砸了;但是这可以递归完成。任何帮助将不胜感激!

解决方法

我不完全确定为什么您需要递归执行此操作,因为在任何 int 上调用 Int.toString 都会产生所需的结果(即使它是负数),但您也可以这样做:

fun helper 0 = "" | helper n = helper (Int.div(n,10)) ^ Int.toString (Int.mod (n,10));

fun int2str n = if n < 0 then "~" ^ helper(~n) else if n = 0 then "0" else helper(n);

以 10 为模将得到最后一位数字,而除以 10 的整数将切断最后一位数字,因此这应该以递归方式获得您想要的结果。