0

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

例如

假设我有一个列表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 IntChar-fromEnum

'2', '   ', '3'

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

"2   3"

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

[Just 6,Just 3, Just 3]

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

"2   3"
"633"
"     1"

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

4

1 回答 1

9

您可以使用该maybe函数,它允许您将函数应用于 a 中的值,Just如果它是默认值Nothing,因此要将 a 转换为以空格为默认值Maybe Int的单个数字,请使用. (将使用 ASCII 值,这不是您想要的)。Charmaybe ' ' intToDigittoEnum

然后,要在列表列表中应用它,您只需使用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"]

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

于 2012-03-15T09:40:20.710 回答