簡體   English   中英

哈斯克爾。 單詞成二進制數

[英]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以獲得ordchr函數:

import Data.Char

您對blCo的警惕是荒謬的,請將其刪除。 同樣,第二個定義將永遠不會運行,因為第一個定義將始終匹配,也就是說,在blCo xx將始終與輸入匹配。 因此,您需要重寫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM