Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell交替套管柱_Haskell - Fatal编程技术网

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])