Haskell列出了Maybe Int,将每个元素转换为char,然后转换为String

时间:2012-03-15 09:19:55

标签: list haskell recursion char maybe

需要帮助解决我的问题的haskell问题。我知道需要采取的步骤(sorta)来实现我想要的但我不知道如何去做。

E.g

说我有一个Maybe Int' s - [[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]

的列表

我需要创建一个函数。

1)列出Maybe Int s

的列表
[[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"

我试图尽可能地解释它,任何提示/帮助/信息来源都将受到赞赏。

1 个答案:

答案 0 :(得分:7)

您可以使用maybe函数,该函数允许您将函数应用于Just中的值,如果是Nothing则使用默认值,以便转换Maybe Int对于以空格为默认值的单个数字Char,请使用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"]

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