我在Haskell中实现了一个二进制到十进制的函数,目前我正在开发一个将十进制转换为二进制值的函数。 (我知道这些功能在某些地方是可用的,虽然它们不是Prelude.hs的一部分)如何在Haskell中实现十进制到二进制函数
我想出了下面的C语言程序代码,但是我很难适应它的功能范例。
while (n > 0)
{
if (n % 2 == 1)
str = str + "1";
else
str = str + "0";
n = n/2;
}
我刚刚冒险进入Haskell的函数式编程,所以我对功能思维方式很陌生。我试图使用递归和列表理解,但我不确定如何正确放置守卫和逻辑,因为这涉及多个条件。我使用一个Int列表来保存单独的二进制位。
--Decimal to binary
toBin:: Int -> [Int]
toBin 0 = [0]
toBin n | (n % 2 == 1) =
|(n % 2 == 0) =
我明白了,上面的模式可以让程序选择保护和结束评估函数。我在这里错了吗?
下面是我想出原始递归来将任何基数(小于10,代替2)转换为小数。
toDecimal :: [Int] -> Int
toDecimal [] = 0
toDecimal (x:xs) = (x * 2 ^(length xs)) + bin xs
谢谢先进。
“需要将一个十进制字符串解析为一个整数的函数” - 就像,erm,'read'? – 2012-02-06 20:02:06
@DanielFischer:是的,但大概是OP试图从头开始实现这一点:)毕竟,'showIntAtBase'也存在。 – ehird 2012-02-06 20:04:22