我需要使用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
我有点难以接受我要去的地方,有人想指引我走正确的道路吗?
答案 0 :(得分:6)
好吧,如果结果字符串应该在大写和&之间交替。小写,然后你可以一次取两个字符串的字符:大写第一个,小写第二个,然后取下一个。例如:
camelcaser (a:b:str) = toUpper a : toLower b : camelcaser str
你仍然需要弄清楚如何处理少于两个字符的字符串,但这应该很容易,而且这个答案已经超过了我想要的基本推动提示。
答案 1 :(得分:0)
这是另一种可能性。也许你可以尝试弄清楚它的工作原理。
camelCaser = map (\(i,c) -> if even i then toUpper c else toLower c) . zip [0..]