字符串仅包含haskell中的字母

时间:2018-10-04 09:28:45

标签: haskell functional-programming character alphabet letter

我想创建一个函数来确定字符是Haskell字母中的字母

isLetter :: Char -> Bool

因此结果可能看起来像这样:如果我键入isLetter 'c',则结果将为True;如果是isLetter ' ',则结果将为False。 / p>

4 个答案:

答案 0 :(得分:10)

您可以自己定义此功能,

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

但是小写字母呢?像'ß''ü''Ф''Й''Æ'这样的外来字母及其大写/小写变体呢?因为Unicode非常复杂,所以对于任何生产级别的使用,您都应依赖已构建的库函数。当您不知道它们的名字时,go to Hoogle and search for "Char -> Bool"经常会指向一个包含所需内容的库。 :-)

例如,Data.Char.isAlpha的文档说:

  

选择字母Unicode字符(小写,大写和标题大写字母,以及无大小写的脚本字母和修饰符字母)。 此功能等效于Data.Char.isLetter

我敢打赌您没想到标题大写字母无大小写字母的字母修饰词! (我没有。)

我什至不知道修饰语字母存在。显然,'ˀ'(声门停止)是加拿大西南不列颠哥伦比亚省的Squamish people使用的字母。有加拿大的路标表明您的功能未考虑在内!

你会成为告诉Ḇøᵇ他不能上飞机的人吗? :Đ

答案 1 :(得分:4)

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

答案 2 :(得分:0)

我认为这对您有用。

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

答案 3 :(得分:0)

我们可以使用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