【发布时间】:2011-05-18 11:59:35
【问题描述】:
我想知道是否有一种简单的方法可以将[5,2,10] 变成"52a"。
在这种情况下,我想将任何 >9 的数字与相应的字母相关联。
提前致谢。
【问题讨论】:
-
大于 36 的数字会发生什么?
标签: list haskell functional-programming integer
我想知道是否有一种简单的方法可以将[5,2,10] 变成"52a"。
在这种情况下,我想将任何 >9 的数字与相应的字母相关联。
提前致谢。
【问题讨论】:
标签: list haskell functional-programming integer
你想对列表的每个元素做一些事情来获得一个新的列表。换句话说,您想对每个元素应用一个函数(您必须自己定义)。这就是 Prelude 中的 map 函数的用途。
要在整数和单个字符之间进行转换,您可以使用 Data.Char 模块中的 chr 和 ord 函数。
所以,
map (\i -> if i < 10 then chr (i + ord '0') else chr (i - 10 + ord 'a'))
是 [Int] -> String 类型的函数,可以执行您想要的操作(但不包括错误检查)。
【讨论】:
更慢但更优雅:
f = map ((['0'..'9'] ++ ['a'..'z']) !!)
如果您的数字是 0-15,请使用 Data.Char 中的 map intToDigit。
【讨论】: