2016-11-14 13 views
2

私がHaskellの宿題でやりたいことの1つは、8進数を2進数に変換する関数を書くことです。入力は文字列でなければならないということが特にあります。8進数への8進数への変換

私はこのようにそれを書くでしょう考え出し:

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" 

その後、あなたがしてバイナリ一つに複数桁の8進数を変換することができます素敵なプロパティを使用することができます82の累乗であるため、各桁を変換します。 「75」は「111」に「7」を形質転換することにより形質転換することができ、「5」、「101」にし、従って、「75」が「111101」である:

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

ありがとうございました。 – Rad

0

で異なる整数エンコーディングを取り扱うための機能がありますモジュール 'Numeric'は 'base'の一部です。

宿題のため、私はバイナリ表現を計算し、任意の8進数で符号化された整数を変換できるようにしたいと考えています。

関連する問題