0

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

結果の文字列が大文字と小文字を交互に使用する場合は、文字列の文字を一度に 2 つずつ取得できます。最初の文字を大文字に、2 番目の文字を小文字にしてから、次のペアを取得します。例えば:

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

まだ 2 文字未満の文字列を処理する方法を考え出す必要がありますが、それは簡単なはずです。この答えは、私が望んでいた基本的な微調整のヒントをすでに超えています。

于 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 に答える