字符串中的Haskell交替外壳

时间:2013-10-31 02:20:50

标签: haskell

我需要使用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

我有点难以接受我要去的地方,有人想指引我走正确的道路吗?

2 个答案:

答案 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..]