Recursion 将字符串转换为整数ML的递归函数
我需要用ML编写自己的递归函数,它以某种方式使用ord将数字字符串转换为整数类型。我可以使用helper函数,但显然我不需要使用helper函数就可以做到这一点(根据我的教授) 我可以假设输入是有效的,并且是正整数(当然是字符串类型) 因此,调用str2int(“1234”)应该输出1234:intRecursion 将字符串转换为整数ML的递归函数,recursion,sml,ml,Recursion,Sml,Ml,我需要用ML编写自己的递归函数,它以某种方式使用ord将数字字符串转换为整数类型。我可以使用helper函数,但显然我不需要使用helper函数就可以做到这一点(根据我的教授) 我可以假设输入是有效的,并且是正整数(当然是字符串类型) 因此,调用str2int(“1234”)应该输出1234:int 我假设我将需要在某个时候使用explode和Inclode,因为ord对字符进行操作,而我的输入是字符串。任何方向都将不胜感激。鉴于您的要求,我想我可以为您服务。这将解决你的问题,但讽刺的是,它不会
我假设我将需要在某个时候使用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会有帮助的假设是正确的。这就是我认为必须要做的,你知道如何递归地做吗?这就是我正在努力解决的问题。这就是我认为必须要做的事情,你知道如何递归地做到吗?这就是我正在努力解决的问题。这比我能想到的要简单得多!非常感谢。我能写的最后一段代码如下。这比我能想到的要简单得多!非常感谢。我能写的最后一段代码如下。