[英]Converting a list of tuples with type (Char, Int) to a String in Haskell
我正在嘗試獲取類型為[(Char, Int)]
的元組列表,並將其轉換為字符串。 例如:
tupToStr [('j',9),('x',1),('f',3)]
"j9x1f3"
我的嘗試在下面。 我的問題是cons運算符要求所有值都具有相同的類型。 因此,例如,我無法執行'j' : 9 : []
。 因此,您將看到一個占位符函數intToChar
,它將理想地將Int
轉換為Char
。 有沒有一種簡單的方法可以完全適合我現有的功能? 如果沒有,您將如何編寫函數來進行相關轉換?
tupToStr :: [(Char, Int)] -> String
tupToStr [] = []
tupToStr (x:xs) = (fst x) : intToChar(snd x) : tupToStr xs
tupToStr = concatMap (\(c,i) -> c:show i)
我們可以使用intToDigit :: Int -> Char
從功能Data.Char
了點。 此外,在元組中使用模式匹配而不是使用fst
和snd
更為優雅。 因此我們可以將其重寫為:
import Data.Char(intToDigit)
tupToStr :: [(Char, Int)] -> String
tupToStr [] = []
tupToStr ((c, n):xs) = c : intToDigit n : tupToStr xs
請注意,這僅在n
始終在0..15
范圍內時才起作用( intToDigit
將對大於9的值使用'a'..'f'
)。 如果您要處理超出范圍的值,可以使用show
,但這當然會返回String
。 通過上面的代碼,我們得到:
Prelude Data.Char> tupToStr [('j',9),('x',1),('f',3)]
"j9x1f3"
將底線更改為:
tupToStr ((a,b):xs) = a : show b ++ tupToStr xs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.