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 回答