Haskell交替套管柱
我需要使用Haskell交替套管柱,haskell,Haskell,我需要使用Data.Char中的函数来创建一个名为camelcaser的函数,该函数的作用听起来像是:大写和小写字母都是大写的→降低→上面的→更低 我尝试使用lexLitChar,先提取一个元素,然后大写,跳过下一个元素,直到整个字符串完成。我也觉得这可以通过递归实现,但是类型转换似乎太难了 我要做的是:String->[(char,String)]->[char,(char,String)]->[char]->[char]->String camelcaser str = foldr f ""
Data.Char
中的函数来创建一个名为camelcaser
的函数,该函数的作用听起来像是:大写和小写字母都是大写的→降低→上面的→更低
我尝试使用lexLitChar
,先提取一个元素,然后大写,跳过下一个元素,直到整个字符串完成。我也觉得这可以通过递归实现,但是类型转换似乎太难了
我要做的是:String->[(char,String)]->[char,(char,String)]->[char]->[char]->String
camelcaser str = foldr f "" str
where f x y = (LexLit x) ++ y
LexLit x = Uppercase (lexlitChar x)
Uppercase (y,z) = toUpper y
我有点不知所措了,有人能告诉我正确的路径吗?好吧,如果结果字符串应该在大写和小写之间交替,那么你可以一次取两个字符串的字符:大写第一个,小写第二个,然后取下一对。例如:
camelcaser (a:b:str) = toUpper a : toLower b : camelcaser str
您仍然需要解决如何处理少于两个字符的字符串,但这应该很容易,而且这个答案已经超过了我想要的基本提示。如果生成的字符串应该在大写和小写之间交替,然后您可以一次只取字符串中的两个字符:大写的第一个,小写的第二个,然后取下一对。例如:
camelcaser (a:b:str) = toUpper a : toLower b : camelcaser str
您仍然需要解决如何处理少于两个字符的字符串,但这应该很容易,而且这个答案已经超过了我想要的基本提示。这里有另一种可能性。也许你可以试着弄清楚它是如何工作的
camelCaser = map (\(i,c) -> if even i then toUpper c else toLower c) . zip [0..]
还有一种可能性。也许你可以试着弄清楚它是如何工作的
camelCaser = map (\(i,c) -> if even i then toUpper c else toLower c) . zip [0..]
你知道不能给以大写字母开头的函数命名,对吗?函数应该如何处理输入字符串中的非字母?你知道不能给以大写字母开头的函数命名,对吗?函数应该如何处理输入字符串中的非字母?进一步说,
zipWith($)(循环[toUpper,toLower])
要再打一点高尔夫球,zipWith($)(循环[toUpper,toLower])