12

Haskellでは、関数Data.Char.isAlphaは文字が文字であるかどうかをチェックしますが、そうしData.Char.isLetterます。これらの機能の間に実際の違いはありますか、それとも互換性がありますか?

4

2 に答える 2

12

ソースを見ると、それらは同等であるように見えます。

isLetter4.3.1.0で定義されているの定義は次のとおりです。

-- derived character classifiers

-- | Selects alphabetic Unicode characters (lower-case, upper-case and
-- title-case letters, plus letters of caseless scripts and modifiers letters).
-- This function is equivalent to 'Data.Char.isAlpha'.
isLetter :: Char -> Bool
isLetter c = case generalCategory c of
        UppercaseLetter         -> True
        LowercaseLetter         -> True
        TitlecaseLetter         -> True
        ModifierLetter          -> True
        OtherLetter             -> True
        _                       -> False

そしての定義isAlpha

-- | Selects alphabetic Unicode characters (lower-case, upper-case and
-- title-case letters, plus letters of caseless scripts and modifiers letters).
-- This function is equivalent to 'Data.Char.isLetter'.
isAlpha                 :: Char -> Bool
isAlpha    c = iswalpha (fromIntegral (ord c)) /= 0

それらは異なる実装を持っているように見えますが、同じ効果があることが文書化されています。

于 2012-11-21T20:32:30.417 に答える
9

今は本当の違いはありません。ドキュメントから:

isAlpha :: Char -> Bool
アルファベットのUnicode文字(小文字、大文字、およびタイトル大文字、および大文字と小文字を区別しないスクリプトの文字と修飾子の文字)を選択します。この関数は、Data.Char.isLetterと同等です。

于 2012-11-21T20:29:02.363 に答える