簡體   English   中英

在Haskell中將類型(Char,Int)的元組列表轉換為String

[英]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了點。 此外,在元組中使用模式匹配而不是使用fstsnd更為優雅。 因此我們可以將其重寫為:

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.

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