Erlang 弦的乘积

Erlang 弦的乘积,erlang,Erlang,我需要一个返回字符串中数字乘积的函数: SomeFunc("1234") -> 1 * 2 * 3 * 4 = 24 这是我的密码: lists:foldr(fun(X, Y) -> X * Y end, 1, "1234"). 但我得到6497400 为什么以及如何修复代码?您的代码将字符的ascii码相乘,即49*50*51*52。为了获得您想要的结果,请使用 lists:foldr(fun(X, Y) -> (X-$0)*Y end, 1, "1234") 其中,$

我需要一个返回字符串中数字乘积的函数:

SomeFunc("1234") -> 1 * 2 * 3 * 4 = 24
这是我的密码:

lists:foldr(fun(X, Y) -> X * Y end, 1, "1234").
但我得到6497400


为什么以及如何修复代码?

您的代码将字符的ascii码相乘,即49*50*51*52。为了获得您想要的结果,请使用

lists:foldr(fun(X, Y) -> (X-$0)*Y end, 1, "1234")

其中,
$0
是字符“0”的ASCII码。

您的代码是字符的ASCII码的乘积,即49*50*51*52。为了获得您想要的结果,请使用

lists:foldr(fun(X, Y) -> (X-$0)*Y end, 1, "1234")

其中,
$0
是字符“0”的ASCII码。

Hmmm。。。。我得到-1560。我认为这是因为foldr-'1'的第二个参数。列表:foldr(fun(X,Y)->(X-$0)*Y end,1,“1234”)-这是正确的版本,但看起来有点神奇。有没有其他方法可以将字符串转换为整数列表?当然你是对的。我修好了。第二个参数已经包含到当前位置的产品,它显然不是ASCII码:)为什么是“magic”?;)“1234”与列表相同
[49,50,51,52]
。要将其转换为列表,可以使用
列表:map(fun(X)->(X-48)end,“1234”)
。而
$0
是“0”的ASCII码,即48。因此,整个乘法也可以写成
list:foldr(fun(X,Y)->X*Y end,1,list:map(fun(Z)->(Z-$0),“1234”)
,尽管这需要对列表进行两次遍历。稍微不那么神奇但仍然难看的是
list:foldr(fun(X,Y)->list\u to_integer([X])*Y end,1,“1234”)
由于X需要放回列表中才能转换为int.Hmmm。。。。我得到-1560。我认为这是因为foldr-'1'的第二个参数。列表:foldr(fun(X,Y)->(X-$0)*Y end,1,“1234”)-这是正确的版本,但看起来有点神奇。有没有其他方法可以将字符串转换为整数列表?当然你是对的。我修好了。第二个参数已经包含到当前位置的产品,它显然不是ASCII码:)为什么是“magic”?;)“1234”与列表相同
[49,50,51,52]
。要将其转换为列表,可以使用
列表:map(fun(X)->(X-48)end,“1234”)
。而
$0
是“0”的ASCII码,即48。因此,整个乘法也可以写成
list:foldr(fun(X,Y)->X*Y end,1,list:map(fun(Z)->(Z-$0),“1234”)
,尽管这需要对列表进行两次遍历。稍微不那么神奇但仍然难看的是
list:foldr(fun(X,Y)->list\u to_integer([X])*Y end,1,“1234”)
因为X需要放回列表中才能转换为int。