【问题标题】:Haskell Lists of Maybe Int's, convert each element to char, then StringMaybe Int 的 Haskell 列表,将每个元素转换为 char,然后是 String
【发布时间】:2012-03-15 09:19:55
【问题描述】:

需要帮助解决我头疼的问题。我知道实现我想要的需要采取的步骤(排序),但我真的不知道如何去做。

例如

假设我有 Maybe Int 的列表 - [[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]

我需要创建一个函数。

1) 获取Maybe Ints 的列表

[[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]

2) 获取第一个列表 (head?)

[Just 2, Nothing, Just 3]

3) 遍历列表中的每个元素 - (x:xs)

Just 2, Nothing, Just 3

4) 将Maybe Int 转换为Char - fromEnum

'2', '   ', '3'

5) 返回包含所有字符的完整 String - (++) = [char] / String

"2   3"

6) 移动到下一个 List 直到 list = []

[Just 6,Just 3, Just 3]

所以最终结果会是这样打印在单独的行上:

"2   3"
"633"
"     1"

我试图尽可能地解释它,任何提示/帮助/信息来源将不胜感激。

【问题讨论】:

  • 仅供参考,您一直说您想对 Maybe Int 列表进行操作,但您的示例每个都有 List Maybe Int 列表。即[[也许是整数]]

标签: list haskell recursion char maybe


【解决方案1】:

您可以使用maybe 函数,它允许您将函数应用于Just 中的值,如果它是Nothing,则默认为Maybe Int,以便将Maybe Int 转换为一位数@987654325 @ 默认为空格,使用maybe ' ' intToDigit。 (toEnum 会使用 ASCII 值,这不是你想要的)。

然后,要将其应用到列表列表中,您只需使用 map 两次:

> import Data.Char
> map (map $ maybe ' ' intToDigit) [[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3], [Nothing, Nothing, Just 1]]
["2 3","633","  1"]

由于字符串只是一个字符列表,因此结果是一个字符串列表。

【讨论】:

  • 完成后,使用 unlines 打印它。所以整个事情应该是unlines。地图(地图 $ 可能是 ' ' intToDigit)$ [你的清单]
猜你喜欢
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 2012-02-05
  • 2011-02-16
  • 2021-07-03
相关资源
最近更新 更多