現在、文字列内の文字数と桁数をカウントするメソッドを実装しようとしています。しかし、 '\'文字を含む文字列を使用すると、私は奇妙な結果を得ています。バックスラッシュ文字はエスケープ文字なので、私はそれを推測しています。ここで文字列変更出力のバックスラッシュ
はメソッドです:
"1234fd" - > 6( '\' は含まれません)
:ここimport Data.Char countLettersAndDigits :: String -> Int countLettersAndDigits [] = 0 countLettersAndDigits (x:xs) = if isDigit x == True || isLetter x == True then 1 + countLettersAndDigits xs else countLettersAndDigits xs
は、それぞれの結果を入力のセットです
"1234fの\ dの" - "FD \ 1234" の文字 に文字列/文字リテラルで>字句エラー 'D'
- > 5
"123 \ 4FD" - > 5
"12 \ 34fd" - > 4
"1 \ 234fd" - > 4
"\ 1234fd" - > 3
たとえば、 "1234 \ fd"と "123 \ 4fd"の両方が結果として5を返すのは奇妙なことです。
この問題の原因とその回避方法については、素晴らしいことだ!
乾杯。
編集
私が上記使用される文字列は、私が遊んでいただけの例であったことを言及するのを忘れてしまいました。問題の原因となっている実際の文字列は、クイックチェックによって生成されています。文字列は "¥178"でした。だから私は自分のコードで、バックスラッシュが1つだけで、文字列が私のために生成されているときに、このケースを処理できる方法が必要です。乾杯。
文字列 '' \ 178 "'は、 'show'や' print'(基本的に引用符が付いている場合)の出力として見れば、実際は印刷可能ではない1文字です。例えば 'map Data.Char.ord" \ 178 "を見てください。これは文字コードのリストを提供します。引用符が付いていない場合は、おそらく4文字です。あなたがコードをエスケープするのに慣れていないなら、少し微妙です。 – luqui
あなたはクイックチェックで問題があると言います。あなたが使用しているquickcheckプロパティは何ですか?おそらくそこに無効な仮定がありますか? – luqui
私はハスケルを新しくしており、速度を上げるためにコード戦争を使用しています。残念ながら私のコードを実行しているときにエラーを投げていたので、もう詳細を与えることはできません。私はエスケープコードを調べて、もっと素早く確認します。迅速な対応に感謝します。 – pls