Haskell int 列表到字符串

Posted

技术标签:

【中文标题】Haskell int 列表到字符串【英文标题】:Haskell int list to String 【发布时间】:2011-05-18 11:59:35 【问题描述】:

我想知道是否有一种简单的方法可以将[5,2,10] 变成"52a"。 在这种情况下,我想将任何 >9 的数字与相应的字母相关联。

提前致谢。

【问题讨论】:

大于 36 的数字会发生什么? 【参考方案1】:

你想对列表的每个元素做一些事情来获得一个新的列表。换句话说,您想对每个元素应用一个函数(您必须自己定义)。这就是 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 Chars (0 .. 0x10FFFF) 的合法范围时,它会抛出异常。事情看起来会相当……有创意……在那之前很久。【参考方案2】:

更慢但更优雅:

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

如果您的数字是 0-15,请使用 Data.Char 中的 map intToDigit

【讨论】:

以上是关于Haskell int 列表到字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 haskell 中打印列表?

Haskell:如何将 IO 输入字符串解析为 Float(或 Int 或其他)?

Haskell“字符串移动”函数

在Haskell中,如何创建具有多种类型的列表?

比较两个列表的某些元素,Haskell

haskell 中的前缀列表