我想知道是否有一种简单的方法可以将[5,2,10]
转换为"52a"
。
如果不仅仅是这种情况,我想将任何数字> 9与相应的字母相关联。
提前致谢。
答案 0 :(得分:9)
您希望对列表的每个元素执行某些操作以获取新列表。换句话说,您希望将一个函数(您必须自己定义)应用于每个元素。这就是Prelude的地图功能。
要在整数和单个字符之间进行转换,可以使用Data.Char模块中的chr和ord函数。
所以,
map (\i -> if i < 10 then chr (i + ord '0') else chr (i - 10 + ord 'a'))
是[Int]类型的函数 - &gt;执行您想要的字符串(不包括错误检查)。
答案 1 :(得分:7)
更慢但更优雅:
f = map ((['0'..'9'] ++ ['a'..'z']) !!)
如果你的数字是0-15,请使用Data.Char中的map intToDigit
。