字符串仅包含哈斯克尔中的字母表



我想做一个函数来决定字符是哈斯克尔字母

表中的字母
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']包含列表中从az的所有字母。同样,范围['A'..'Z']是一个包含所有大写字母的列表。因此,该函数将检查给定的字符是否属于这些列表中的任何一个,如果是,则返回True;否则,它将返回False

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

最新更新