2011-01-13 38 views
1

編輯所有內容haskell。字轉換爲二進制數

我需要將字轉換爲二進制數。 與你的一點幫助,我得到這個

import Data.Char 


blCo :: String -> String 
blCo xs = concatMap lett2num) xs    

lett2num :: Char -> Int 
lett2num y 
    | (ord 'A' <= ord y) ord 'z') = (ord y - ord 'a') +1 


num2bin :: Int -> String 
num2bin n 
    | n >= 0  = ctive number" 
    where n2b 0 = [] 
     n2b n = n `mod` 2 : n2b (n `div` 2) 

GHC告訴我犯錯誤不undertsand它 錯誤:

Couldn't match expected type `Char' against inferred type `String' 
In the first argument of `(:)', namely `num2bin (lett2num x)' 
In the expression: num2bin (lett2num x) : blCo xs 
In the definition of `blCo': 
    blCo (x : xs) = num2bin (lett2num x) : blCo xs 
+0

什麼是` x:xs` in blCo for?去掉它。 – kennytm 2011-01-13 17:43:29

+2

你能告訴我們翻譯給你的錯誤嗎?當你去看醫生時,你確實告訴他什麼傷害,在哪裏,不是嗎? – 2011-01-13 17:45:10

+0

blCo :: String - > Int blCo x = num2bin(lett2num x) 應該這樣嗎? – Tonja 2011-01-13 17:45:18

回答

1

有不少類型的錯誤在這裏,從僅僅是一種粗略的一目瞭然。

您聲明blCoString -> Integer。所以它需要一個字符串,並返回一個整數。但字符串參數x被傳入lett2num,這應該是一個字符 - 這不會起作用,這就是錯誤信息的含義。也許你的意思申報行

blCo [x] = num2bin(lett2num x) 

使x將在一字符串匹配字符值? 在任何情況下,這就是導致編譯器錯誤的原因 - 您正在將String傳遞給期望值爲char的函數。

此外,blCo應該返回一個Integer,但它的返回值總體上將會是num2bin輸出(帶有一些參數) - 這個函數返回一個String,所以這不能工作的。沒有看到什麼lett2bin做什麼(和/或你的方法是什麼),我不能說什麼是錯的 - 但它似乎是某個東西,不加上。

那麼這是怎麼回事 - 你是否試圖輸出一個字符串(傳入的數字串的二進制表示)?或者你是否試圖輸出某種類型的整數?

0

1)請寫出更清晰的問題,包括編譯器錯誤,如果有的話。

2)請儘可能包括您的所有代碼。此代碼缺少lett2num。

3)一些問題:

您需要導入Data.Char得到ordchr功能:

import Data.Char 

您對BLCO後衛是荒謬的,將其刪除。另外,第二個定義永遠不會運行,因爲第一個定義總是匹配的,即blCo x中的x將始終與輸入匹配。所以你需要重寫blCo。編輯: 這裏還是有點不對。我建議你繼續使用IRC並實時進行交流,這樣除了正確的代碼之外,您還可以獲得更多的理解。

1)對於初學者打字:那應該返回一個String並連接它使用:這將導致:: [String]),但希望只用String落得名單上,你調用一個函數(num2bin)。我猜你想用blCo xs = concatMap (num2bin . lett2num) xs

2)blCo在列表上遞歸,但沒有定義當列表命中[]時該做什麼。一種選擇是重新定義它以使用concatMap,使其不遞歸。

3)您在導入Data.Char時錯過了我的觀點。關鍵是要在SO上提供完整的代碼,以便人們可以複製/粘貼代碼以更輕鬆地爲您提供幫助,而不僅僅是您需要私人副本。