2016-11-14 221 views
2

在我的Haskell作业中,我必须做的一件事是编写一个将八进制数转换为二进制数的函数,具体而言就是要求输入必须是字符串。将八进制转换为二进制

我想我会写这样的:

okt2bin:: String -> String 
okt2bin n  
     |n == "0" = "000" 
     |n == "1" = "001" 
     |n == "2" = "010" 
     |n == "3" = "011" 
     |n == "4" = "100" 
     |n == "5" = "101" 
     |n == "6" = "110" 
     |n == "7" = "111" 

的事情是,我不能让它多位数的工作。谁能帮忙?

+2

我认为你的函数应该是'Char - > String'类型。然后用它作为'map'中的基本函数。 –

+1

'okts2bins = concatMap(okt2bin.show)' – Bergi

+0

另一个建议是,使用模式匹配而不是警卫,还有一件事情,你没有考虑负面投入(可能不需要练习,但为什么不去做: )) –

回答

2

您可以编写一个函数一个数字,这几乎看起来是一样的:

octDigit2Bin :: Char -> String 
octDigit2Bin n 
     |n == '0' = "000" 
     |n == '1' = "001" 
     |n == '2' = "010" 
     |n == '3' = "011" 
     |n == '4' = "100" 
     |n == '5' = "101" 
     |n == '6' = "110" 
     |n == '7' = "111" 

之后,您可以用最好的属性,你可以改变一个多位数八进制数成一个二进制转换每个数字,因为82的幂,例如“75”可以通过将“7”到“111”和“5”到“101”,因此被转化的“75”是“111101”:

okt2bin :: String -> String 
okt2bin xs = concatMap octDigit2Bin xs 
+0

谢谢,这样做有帮助。 – Rad

0

有功能用于处理在不同的整数编码模块'Numeric',它是'base'的一部分。

因为它是作业,我猜你的意图是你计算二进制表示,并能够转换任意八进制编码的整数。

相关问题