Haskell整数列表转换为字符串

5
我想知道是否有一种简单的方法将[5,2,10]转换为"52a"。不仅仅是对于这种情况,我还想将任何大于9的数字与相应的字母相关联。
谢谢。

6
36以外的数字会发生什么? - Don Roby
2个回答

9
你想对列表中的每个元素执行某些操作以获得一个新的列表。换句话说,你想对每个元素应用一个函数(需要自己定义),这就是 Prelude 中的 map 函数的作用。
要在整数和单个字符之间进行转换,可以使用 Data.Char 模块中的 chr 和 ord 函数。
因此,
map (\i -> if i < 10 then chr (i + ord '0') else chr (i - 10 + ord 'a'))

这是一个类型为[Int] -> String的函数,它可以实现您想要的功能(但不包括错误检查)。


至少在 GHC 上,当 chr 函数的参数超出 Unicode 字符的合法范围(0 .. 0x10FFFF)时,它将抛出异常。在那之前,事情看起来会相当...有创意... - wolfgang

7

更慢但更优雅:

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

如果你的数字是0-15,使用来自Data.Char的map intToDigit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接