Recursion 将字符串转换为整数ML的递归函数

Recursion 将字符串转换为整数ML的递归函数,recursion,sml,ml,Recursion,Sml,Ml,我需要用ML编写自己的递归函数,它以某种方式使用ord将数字字符串转换为整数类型。我可以使用helper函数,但显然我不需要使用helper函数就可以做到这一点(根据我的教授) 我可以假设输入是有效的,并且是正整数(当然是字符串类型) 因此,调用str2int(“1234”)应该输出1234:int 我假设我将需要在某个时候使用explode和Inclode,因为ord对字符进行操作,而我的输入是字符串。任何方向都将不胜感激。鉴于您的要求,我想我可以为您服务。这将解决你的问题,但讽刺的是,它不会

我需要用ML编写自己的递归函数,它以某种方式使用ord将数字字符串转换为整数类型。我可以使用helper函数,但显然我不需要使用helper函数就可以做到这一点(根据我的教授)

我可以假设输入是有效的,并且是正整数(当然是字符串类型)

因此,调用str2int(“1234”)应该输出1234:int


我假设我将需要在某个时候使用explode和Inclode,因为ord对字符进行操作,而我的输入是字符串。任何方向都将不胜感激。

鉴于您的要求,我想我可以为您服务。这将解决你的问题,但讽刺的是,它不会帮助你

嗯,字符
#“0”
的序号是
48
。所以,这意味着,如果你减去任何表示数字的序数48,你就会得到它的十进制值。比如说

ord(#"9") - 48
val num = "2014"
val digits = map charToInt (explode num)
产量9

因此,将表示0-9之间数字的给定字符转换为相应小数的函数是:

fun charToInt(c) = ord(c) - 48
假设你有一串像“2014”这样的数字。然后,您可以首先将字符串分解为字符列表,然后将每个字符映射到其对应的十进制数

比如说

ord(#"9") - 48
val num = "2014"
val digits = map charToInt (explode num)
explode
函数是一个助手函数,它接受字符串并将其转换为字符列表

现在,
数字
将是代表十进制数的整数列表
[2,0,1,4]

然后,只需应用10的幂就可以得到最终的整数

2 * 10 ^ 3 = 2000
0 * 10 ^ 2 = 0
1 * 10 ^ 1 = 10
4 * 10 ^ 0 = 4

结果将是
2000+0+10+4=2014

考虑到你的要求,我想我可以帮你。这将解决你的问题,但讽刺的是,它不会帮助你

嗯,字符
#“0”
的序号是
48
。所以,这意味着,如果你减去任何表示数字的序数48,你就会得到它的十进制值。比如说

ord(#"9") - 48
val num = "2014"
val digits = map charToInt (explode num)
产量9

因此,将表示0-9之间数字的给定字符转换为相应小数的函数是:

fun charToInt(c) = ord(c) - 48
假设你有一串像“2014”这样的数字。然后,您可以首先将字符串分解为字符列表,然后将每个字符映射到其对应的十进制数

比如说

ord(#"9") - 48
val num = "2014"
val digits = map charToInt (explode num)
explode
函数是一个助手函数,它接受字符串并将其转换为字符列表

现在,
数字
将是代表十进制数的整数列表
[2,0,1,4]

然后,只需应用10的幂就可以得到最终的整数

2 * 10 ^ 3 = 2000
0 * 10 ^ 2 = 0
1 * 10 ^ 1 = 10
4 * 10 ^ 0 = 4

结果将是
2000+0+10+4=2014

您可以定义一个辅助函数
charsToInt
,该函数从左到右处理字符串中的数字。 在每一步中,它都将最左边的数字
c
转换成一个数字,并与
n
的10倍进行加法(这是所有先前解析的数字的中间和)

为您提供:
val n=1024:int


正如您所看到的,诀窍是在每次递归调用时将中间结果向下传递到下一步。在处理此类问题时,这是一种非常常见的技术。

您可以定义一个辅助函数
charsToInt
,该函数从左到右处理字符串中的数字。 在每一步中,它都将最左边的数字
c
转换成一个数字,并与
n
的10倍进行加法(这是所有先前解析的数字的中间和)

为您提供:
val n=1024:int


正如您所看到的,诀窍是在每次递归调用时将中间结果向下传递到下一步。在处理此类问题时,这是一种非常常见的技巧。

以下是我的想法:

10 n=
如果n=0,则为1,否则为10*pow10(n-1);
趣味str2帮助(L,n)=
如果为空,则为0
其他(作战需求文件(hd L)-48)*pow10(n)+STR2帮助(tl L,n-1);
趣味str2int(字符串)=
str2help(分解字符串,大小字符串-1);

str2int(“1234”)以下是我的想法:

10 n=
如果n=0,则为1,否则为10*pow10(n-1);
趣味str2帮助(L,n)=
如果为空,则为0
其他(作战需求文件(hd L)-48)*pow10(n)+STR2帮助(tl L,n-1);
趣味str2int(字符串)=
str2help(分解字符串,大小字符串-1);

str2int(“1234”)
你能更具体地说明你需要什么样的帮助吗?你认为explode和ord会有帮助的假设是正确的。你能更具体地说明你需要什么样的帮助吗?你认为explode和ord会有帮助的假设是正确的。这就是我认为必须要做的,你知道如何递归地做吗?这就是我正在努力解决的问题。这就是我认为必须要做的事情,你知道如何递归地做到吗?这就是我正在努力解决的问题。这比我能想到的要简单得多!非常感谢。我能写的最后一段代码如下。这比我能想到的要简单得多!非常感谢。我能写的最后一段代码如下。