-1
import Data.Char
blockCode :: S
lett2num :: Char -> Int
lett2num y
| (or
num2bin :: Int -> [Int]
num2bin n: negative number"
where n2b 0 = []
n2b n = n `mod` 2 : n2b (n `div` 2)
import Data.Char
blockCode :: S
lett2num :: Char -> Int
lett2num y
| (or
num2bin :: Int -> [Int]
num2bin n: negative number"
where n2b 0 = []
n2b n = n `mod` 2 : n2b (n `div` 2)
您可以使用concatMap show
轉換列表轉換爲字符串:
Main> num2bin 8
[0,0,0,1]
Main> concatMap show $ num2bin 8
"0001"
但請注意,你的函數的輸出是相反的。
要盡一切一氣呵成,做
num2bin :: Int -> String
num2bin n
| n >= 0 = concatMap show $ reverse $ n2b n
| otherwise = error "num2bin: negative number"
where n2b 0 = []
n2b n = n `mod` 2 : n2b (n `div` 2)
功能轉換爲二進制整數:
num2bin :: (Integral a, Show a) => a -> String
num2bin 0 = "0"
num2bin 1 = "1"
num2bin n
| n < 0 = error "Negative number"
| otherwise = num2bin (n `div` 2) ++ show (n `mod` 2)
如果我正確理解你的二進制編碼,這將是不可能的解碼,因爲它是不明確的。例如,字符串AA和C都將被編碼爲11.您確定這是您想要的嗎? – sepp2k 2011-01-13 16:54:41
em..no。我不想要這個,但我不知道如何以另一種方式做 – Tonja 2011-01-13 16:58:18