[英]haskell. words into binary numbers
編輯了一切
我需要將單詞轉換為二進制數。 在您的幫助下,我得到了
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告訴我一個錯誤。
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
粗略地看,這里有很多類型錯誤。
您已將blCo
聲明為blCo
String -> Integer
。 因此它需要一個字符串,並返回一個整數。 但是將String參數x
傳遞到lett2num
,該lett2num
應該采用字符-這將無法工作,這就是錯誤消息的含義。 也許您是要聲明該行為
blCo [x] = num2bin(lett2num x)
以便x
匹配一個字符字符串中的字符值? 無論如何,這就是導致編譯器錯誤的原因 -您正在將String
傳遞給需要char
的函數。
另外, blCo
應該返回一個Integer
,但是其返回值的num2bin
將是num2bin
的輸出(帶有某些參數),並且此函數返回String
,因此也永遠無法工作。 沒有看到lett2bin
功能(和/或您的方法是什么),我無法說出問題所在-但似乎某處沒有結果。
那是什么-您是否要輸出一個String(傳入的數字字符串的二進制表示形式)? 還是您要輸出某種整數?
1)如果存在,請寫出更清晰的問題,包括編譯器錯誤。
2)請盡可能包含所有代碼。 此代碼缺少lett2num。
3)一些問題:
您需要導入Data.Char
以獲得ord
和chr
函數:
import Data.Char
您對blCo的警惕是荒謬的,請將其刪除。 同樣,第二個定義將永遠不會運行,因為第一個定義將始終匹配,也就是說,在blCo x
, x
將始終與輸入匹配。 因此,您需要重寫blCo。
編輯:這里仍然有一些錯誤。 我建議您使用IRC並進行實時討論,以便在獲得正確代碼的同時獲得更多了解。
1) num2bin
者的鍵入:您調用了一個函數( num2bin
),該函數應該返回一個String
,並使用:
將其連接到列表上,這將導致num2bin
:: [String]
),但只希望以String
結尾。 我猜你想使用blCo xs = concatMap (num2bin . lett2num) xs
。
2) blCo
在列表上是遞歸的,但是沒有定義當列表擊中[]
時該怎么做。 一種選擇是重新定義它以使用concatMap
,使其成為非遞歸的。
3)您錯過了我導入Data.Char
。 關鍵是要在SO上擁有完整的代碼,以便人們可以復制/粘貼您的代碼以更輕松地為您提供幫助,而不僅僅是您在私人副本上需要它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.