您好我正在尝试用SML编写一个函数。我的目标是创建一个函数,该函数采用表示[2,3,4]等值的列表,并返回其整数表示,即432(在列表中第一个元素是那个位置)。
所以我的思路是将列表中的每个元素相互添加...乘以10 ^ n,其中n每次增加1
例如[2,3,4] - > 2 * 10 ^ 0 + 3 * 10 ^ 1 + 4 * 10 ^ 2 = 432 ..我不知道如何递归地执行此操作但这就是我所拥有的
fun List2Integer nil = 0
| List2Integer (x::xs) = x * (power (10,1)) + (List2Integer xs);
我知道现在它不起作用,因为x总是乘以10 ^ 1,其中1不会增加。
感谢您抽出宝贵时间阅读本文..我将不胜感激任何提示
答案 0 :(得分:1)
fun toInt [] = 0
| toInt (x :: xs) = x + 10 * (toInt xs)
要从数字列表[a0, a1, a2, a3, ...]
中计算出正确的数字,您只需计算总和a0 + a1*10 + a2*10*10 + a3*10*10*10 + ...
。然后你可以左因子输出10并获得a0 + 10*(a1 + 10*(a2 + 10*(a3 + 10*(...))))
形式的表达式,这正是上述函数的作用。