0

我需要使用 from 的函数Data.Char来创建一个名为 的函数camelcaser,它的功能听起来像是:大写和小写模式中的每个字母大写→小写→大写→小写。

我尝试使用lexLitChar, 拉出一个元素,然后将其大写,跳过下一个元素,直到整个字符串完成。我也觉得这可以通过递归来完成,但类型转换似乎太难了。

我要做什么:String -> [(char,string)] -> [char,(char,string)] -> [char] -> String

camelcaser str = foldr f "" str
    where f x y           = (LexLit x) ++ y
          LexLit    x     = Uppercase (lexlitChar x)
          Uppercase (y,z) = toUpper y

我有点难过我要去哪里,有人愿意指导我走正确的道路吗?

4

2 回答 2

6

好吧,如果结果字符串应该在大写和小写之间交替,那么您可以一次取两个字符串的字符:第一个大写,第二个小写,然后取下一对。例如:

camelcaser (a:b:str) = toUpper a : toLower b : camelcaser str

您仍然需要弄清楚如何处理少于两个字符的字符串,但这应该很容易,而且这个答案已经超出了我想要的基本提示。

于 2013-10-31T02:34:22.220 回答
0

这是另一种可能性。也许你可以尝试弄清楚它是如何工作的。

camelCaser = map (\(i,c) -> if even i then toUpper c else toLower c) . zip [0..]
于 2013-10-31T08:41:55.827 回答