将二进制数转换为十进制而无需递归[HASKELL]

时间:2018-09-30 17:46:58

标签: haskell

我还没有找到解决此问题的方法。我有一个整数列表,该列表的哪个元素是二进制数字(0或1),因此我需要设计一个函数,将该整数列表转换为适当的十进制数字。

示例:

输入:[0,1,0] 输出:2

但是有一个特定的条件,必须使用理解列表,并且不能使用递归性。

问题是,当我因为无法将位置保存在理解列表中而需要知道要应用变换的数字的位置时。

谢谢

1 个答案:

答案 0 :(得分:3)

  

问题是,当我因为无法将位置保存在理解列表中而需要知道要应用变换的数字的位置时。

您可以使用zip和范围来生成带有索引的2元组,例如:

[(idx, val) | (idx, val) <- zip [0..] bin]

将产生一个由2个元组组成的列表:第一个包含该元素的元素,第二个包含该位置data的元素。

因此,如果使用bin = [0,1,0],则上面的列表理解将导致:

Prelude> [(idx, val) | (idx, val) <- zip [0..] bin]
[(0,0),(1,1),(2,0)]

由于这似乎是“核心问题”,所以我建议您以上述策略来解决其余问题,或者提出一个问题(编辑此问题,或者再提出一个新问题),以解决其他问题问题。