2010-12-01 104 views
4

我想知道是否有简单的方法将[5,2,10]转换为"52a"。 如果不是这种情况,我想把任何数字> 9与相应的字母相关联。Haskell int list to String

在此先感谢。

+6

对于大于36的数字会发生什么? – 2010-12-01 13:07:57

回答

9

您想要对列表中的每个元素执行某些操作以获取新列表。换句话说,你想要为每个元素应用一个函数(你必须定义自己)。这是Prelude的地图功能。

要在整数和单个字符之间进行转换,可以使用Data.Char模块中的chr和ord函数。

所以,

map (\i -> if i < 10 then chr (i + ord '0') else chr (i - 10 + ord 'a')) 

是类型的函数[INT] - >字符串,你想要做什么(检查包括没有错误,虽然)。

+1

我害怕思考当i> 255时会发生什么:D – 2010-12-01 13:27:13

+0

至少在GHC上,当chr函数的参数超出unicode Chars(0 .. 0x10FFFF)的合法范围时,它将抛出一个异常。在这之前的事情看起来很有创意...... – wolfgang 2010-12-01 13:42:24

7

较慢但更加优雅:

f = map ((['0'..'9'] ++ ['a'..'z']) !!) 

如果您的号码是0-15使用map intToDigit从Data.Char。