【发布时间】:2014-03-12 11:12:06
【问题描述】:
我基本上被要求打开“HelloWorld!”到“嘿嘿嘿嘿嘿嘿!!”仅使用这种类型的 Haskell 函数
stringDub :: String -> String
我不是在寻找一个直接的答案,只是一些关于如何去做的指示,因为我对 Haskell 完全陌生。
提前致谢。
【问题讨论】:
标签: string function haskell duplicates repeat
我基本上被要求打开“HelloWorld!”到“嘿嘿嘿嘿嘿嘿!!”仅使用这种类型的 Haskell 函数
stringDub :: String -> String
我不是在寻找一个直接的答案,只是一些关于如何去做的指示,因为我对 Haskell 完全陌生。
提前致谢。
【问题讨论】:
标签: string function haskell duplicates repeat
您使用模式匹配将参数分解为第一个字符和剩余字符,然后在尾部递归调用 stringDub 函数。您还需要检查空列表,以便在没有更多元素时结束递归。
stringDub [] = []
stringDub (h:t) = doubleItUp h ++ stringDub t
where doubleItUp :: Char -> String
doubleItUp = -- fill in the rest.
【讨论】:
stringDub = concatMap doubleItUp。但最好先学会明确地编写递归。
或者因为字符串是列表,而列表是单子:
stringDub' :: String -> String
stringDub' xs = do
xs >>= \x -> [x,x]
【讨论】: