【问题标题】:Making an integer value from a list that represents that integer从表示该整数的列表中生成一个整数值
【发布时间】:2015-02-08 01:19:11
【问题描述】:

您好,我正在尝试用 SML 编写函数。我的目标是创建一个函数,该函数接受一个表示 [2,3,4] 之类的值的列表,并返回其整数表示,即 432(列表中的第一个元素是个位)。

所以我的思路是将列表中的每个元素相互添加..乘以 10^n 其中 n 每次增加一

例如 [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 没有增加。

感谢您抽出宝贵时间阅读本文。如果有任何提示,我将不胜感激

【问题讨论】:

    标签: sml smlnj


    【解决方案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*(...)))) 形式的表达式,这正是上面的函数所做的。

    【讨论】:

    • 您能否介绍一下它的工作原理/原因?我不太确定我是否理解如何将每个元素加 10 加起来就是正确的数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2017-07-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多