使用递归Haskell的二进制到十进制

时间:2016-01-26 20:32:45

标签: haskell recursion binary decimal

我有一个赋值来创建一个在Haskell中将二进制转换为十进制的函数。它必须是一个递归函数,只使用if-then-else,+,times等。我无法导入库来简化工作。我到目前为止失去任何形式的指导会有所帮助我不熟悉haskell我可以用另一种语言完成这项任务。

1 个答案:

答案 0 :(得分:3)

如果你能用另一种语言来做,那么我怀疑你可以通过在迭代这些位时向它添加值来构建十进制值来实现这一点。对$ echo $(printf '%s-%04d' 2016-01-26 9) 2016-01-26-0009 $ echo $(printf '%s-%04d' 2016-01-26 11) 2016-01-26-0011 $ echo $(printf '%s-%04d' 2016-01-26 111) 2016-01-26-0111 2 + 8 + 128

在Haskell中,您可以使用具有两个参数的函数来实现此目的:

10001010

您最初将binary2Decimal decimal [] = decimal binary2Decimal decimal (bit : binary) = ... 应用于f的{​​{1}}会发生什么情况,并且当您从位列表(decimal)的头部取出元素时,您将一定的十进制值(读者的练习)添加到当前的十进制值。当0binary时,您已达到基本情况,binary将包含最终值。

如果您感兴趣,还可以使用fold(l/r)解决此模式的问题,这样可以避免显式递归。