问题描述
我制作了一个非常小的程序,它接受一个 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 的整数将切断最后一位数字,因此这应该以递归方式获得您想要的结果。