繁体   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