我想做一个函数来决定字符是哈斯克尔字母
表中的字母isLetter :: Char -> Bool
所以结果可能看起来像这样:如果我输入isLetter 'c'
,结果将是True
,如果是isLetter ' '
,那么结果是False
。
你可以自己定义这个函数,
isLetter :: Char -> Bool
isLetter 'A' = True
isLetter 'B' = True
...
isLetter 'Z' = True
但是小写字母呢?像'ß'
、'ü'
、'Ф'
、'Й'
或'Æ'
这样的外来字母及其大写/小写变体呢?由于 Unicode 非常复杂,因此对于任何生产级使用,您都应该依赖已经构建的库函数。当你不知道它们叫什么时,去Hoogle搜索"Char -> Bool
",你经常会被指向一个包含你想要的东西的库。
例如,Data.Char.isAlpha
的文档说:
选择按字母顺序排列的 Unicode 字符(小写、大写和标题大小写字母,以及不大写脚本的字母和修饰符字母(。此函数等效于
Data.Char.isLetter
。
我敢打赌你没有想到标题大小写字母、无大小写脚本字母和修饰符字母!(我没有。
我什至不知道修饰符字母的存在。显然,'ˀ'
(声门停止(是加拿大不列颠哥伦比亚省西南部的斯阔米什人使用的字母。那里有加拿大的路标,你的功能没有考虑到!
你会成为那个告诉Ḇøb他不能上飞机的人吗?!
您可以使用Data.Char.isAlpha
来检查字符是否为字母符号。
我认为这对你有用。
isLetter :: Char -> Bool
isLetter c = (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
我们可以使用elem
函数和范围来查看字符是否为字母。 请注意,范围['a'..'z']
包含列表中从a到z的所有字母。同样,范围['A'..'Z']
是一个包含所有大写字母的列表。因此,该函数将检查给定的字符是否属于这些列表中的任何一个,如果是,则返回True
;否则,它将返回False
。
isLetter :: Char -> Bool
isLetter character = if character `elem` ['a'..'z'] || character `elem` ['A'..'Z']
then True
else False