需要帮助解决我的问题的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"
我试图尽可能地解释它,任何提示/帮助/信息来源都将受到赞赏。
答案 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"]
由于字符串只是一个字符列表,因此结果是一个字符串列表。