字符串仅包含 haskell 中的字母表

String contains only the alphabet in haskell

我想做一个函数来判断字符是否是 Haskell

中的字母
isLetter :: Char -> Bool

所以结果可能是这样的:如果我键入 isLetter 'c',结果将是 True,如果是 isLetter ' ',则结果是 False .

您可以使用 Data.Char.isAlpha 来检查字符是否为字母符号。

你可以自己定义这个函数,

isLetter :: Char -> Bool
isLetter 'A' = True
isLetter 'B' = True
...
isLetter 'Z' = True

但是小写字母呢? 'ß''ü''Ф''Й''Æ' 及其变体 uppercase/lowercase 等外国字母呢?因为 Unicode 非常复杂,所以对于任何 production-level 使用,您应该依赖于已经构建的库函数。当您不知道它们叫什么时,go to Hoogle and search for "Char -> Bool" 并且您通常会被指向一个完全包含您想要的内容的库。 :-)

例如,Data.Char.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.

我打赌你没有想到 title-case 字母无大小写字母修饰字母! (我没有。)

我什至不知道 修饰字母 存在。显然,'ˀ' (glottal stop) is a letter used by the Squamish people 位于加拿大不列颠哥伦比亚省西南部。那里有加拿大的路标,您的功能没有考虑在内!

你会是那个告诉 Ḇøᵇ 他不能上飞机的人吗?! :Đ

我认为这对你有用。

isLetter :: Char -> Bool
isLetter c = (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))

我们可以使用elem函数和范围来判断一个字符是否是字母。请注意,范围 ['a'..'z'] 包含列表中从 az 的所有字母。同样,范围 ['A'..'Z'] 是一个包含所有大写字母的列表。因此,该函数将检查给定字符是否属于这些列表中的任何一个,如果是,它 returns True;否则,它 returns False.

isLetter :: Char -> Bool
isLetter character = if character `elem` ['a'..'z'] || character `elem` ['A'..'Z']
                     then True
                     else False