Главная » Haskell » Модуль Char

0

отчасти дублирует описания программных сущностей для представления и работы с символами. Данный модуль создан в экспериментальном порядке в целях постепенной разгрузки стандартного модуля Prelude. Большинство определённых в модуле Char программных сущностей определены и в мо-

дуле Prelude.  Однако есть и новые функции, поэтому ниже  все  программные сущности скрупулёзно перечисляются. Использование:

import  Data.Char

Главный тип данных, описываемый в этом модуле,  — Char. Этот тип используется для представления строковых символов.

Тип: Char

Описание: перечисление, чьи значения представляют собой символы в кодировке Unicode (стандарт ISO/IEC  10646).

Определение:

Тип определён в виде примитива.

Для того чтобы получить символ из соответствующего целого  числа, представляющего собой код символа в таблице кодов,  необходимо  воспользоваться методом toEnum из класса Ord (см. стр. 121). Обратное преобразование производится при помощи метода fromEnum того же класса.

Для этого типа данных определены экземпляры следующих классов: Bounded, Data, Enum, Eq, IsChar, Ix, NFData, Ord, PrintfArg, Random, Read, Show, Storable, Typeable, IArray и MArray.

Тип: String

Описание: список символов, использующийся для представления строк.

Определение:

type  String = [Char]

Все символы из кодировки Unicode разделены на буквы, цифры, знаки пунктуации, специальные символы, пробельные символы и т. д. Многие функции этого модуля предназначены для проверки и  разделения символов на различные классы.

Функция: isControl

Описание: возвращает значение True, если заданный символ является управляющим. В противном случае возвращается значение False.

Определение:

isControl :: Char ->  Bool

isControl c  = c  < ’ ’ || c  >= ’\DEL’ &&  c  <= ’\x9f’

Функция: isSpace

Описание: возвращает значение True, если заданный символ является пробельным. В противном случае возвращается значение False.

Определение:

isSpace  ::  Char ->  Bool isSpace  c  =  c  == ’ ’ ||

c  == ’\t’ ||

c  == ’\n’ ||

c  == ’\r’ ||

c  ==  ’\f’  || c  ==  ’\v’

Функция: isLower

Описание: возвращает значение True, если заданный символ является символом в нижнем регистре (строчная буква). В противном случае возвращается значение False.

Определение:

isLower  ::  Char ->  Bool

isLower  c  = c  >= ’a’  &&  c  <= ’z’

Функция: isUpper

Описание: возвращает значение True, если заданный символ является символом в верхнем регистре (заглавная буква). В противном случае возвращается значение False.

Определение:

isUpper  ::  Char ->  Bool

isUpper  c  = c  >= ’A’  &&  c  <= ’Z’

Функция: isAlpha

Описание: возвращает значение True, если заданный символ  является буквой.

В противном случае возвращается значение False.

Определение:

isAlpha ::  Char ->  Bool

isAlpha c  = isUpper  c  ||  isLower  c

Функция: isAlphaNum

Описание: возвращает значение True, если заданный символ является буквой или цифрой. В противном случае возвращается значение False.

Определение:

isAlphaNum :: Char  ->  Bool

isAlphaNum c  = isAlpha c  ||  isDigit  c

Функция: isPrint

Описание: возвращает значение True, если заданный символ может быть напечатан. В противном случае возвращается значение False.

Определение:

isPrint :: Char  ->  Bool

Функция определена в виде примитива.

Функция: isDigit

Описание: возвращает значение True, если заданный символ является цифрой.

В противном случае возвращается значение False.

Определение:

isDigit :: Char  ->  Bool

isDigit c  = c  >= ’0’ &&  c  <= ’9’

Функция: isOctDigit

Описание: возвращает значение True, если заданный символ является  цифрой для представления восьмиричных чисел. В противном случае возвращается значение False.

Определение:

isOctDigit :: Char ->  Bool  isOctDigit c  = c  >= ’0’ &&  c  <= ’7’

Функция: isHexDigit

Описание: возвращает значение True, если заданный символ является  цифрой для представления шестнадцатиричных  чисел. В противном случае возвращается значение False.

Определение:

isHexDigit ::  Char ->  Bool isHexDigit c  =  isDigit c  ||

c  >= ’A’ &&  c  <= ’F’ || c  >= ’a’ &&  c  <= ’f’

Функция: isLetter

Описание: синоним функции isAlpha для использования с произвольным диапазоном символов Unicode.

Определение:

isLetter ::  Char ->  Bool

isLetter c  = case  generalCategory  c  of UppercaseLetter  ->  True LowercaseLetter  ->  True TitlecaseLetter  ->  True ModifierLetter    ->  True OtherLetter          ->  True

_                            ->  False

Функция: isMark

Описание: возвращает значение True, если заданный символ  является знаком для представления ударений и других символов, комбинируемых с предыдущим. В противном случае возвращается значение False.

Определение:

isMark  ::  Char ->  Bool isMark  :: Char ->  Bool

isMark  c  = case  generalCategory  c  of NonSpacingMark             ->  True SpacingCombiningMark  ->  True EnclosingMark               ->  True

_                                      ->  False

Функция: isNumber

Описание: синоним функции isDigit для использования с произвольным диапазоном символов Unicode (возвращает значение True для произвольных цифр — арабских, римских и т. п.).

Определение:

isNumber :: Char  ->  Bool

isNumber c  = case  generalCategory  c  of DecimalNumber  ->  True LetterNumber    ->  True OtherNumber      ->  True

_                        ->  False

Функция: isPunctuation

Описание: возвращает значение True, если заданный символ является  знаком препинания. В противном случае возвращается значение False.

Определение:

isPunctuation :: Char  ->  Bool

isPunctuation c  = case generalCategory  c  of ConnectorPunctuation  ->  True DashPunctuation           ->  True OpenPunctuation           ->  True ClosePunctuation          ->  True InitialQuote                 ->  True FinalQuote                     ->  True OtherPunctuation          ->  True

_                                     ->  False

Функция: isSymbol

Описание: возвращает значение True, если заданный символ является  математическим символом, знаком валюты и т. д. В противном  случае возвращается значение False.

Определение:

isSymbol  :: Char  ->  Bool

isSymbol  c  = case  generalCategory  c  of MathSymbol          ->  True CurrencySymbol  ->  True ModifierSymbol  ->  True OtherSymbol        ->  True

_                          ->  False

Функция: isSeparator

Описание: возвращает значение True, если заданный символ является разделительным. В противном случае возвращается значение False.

Определение:

isSeparator :: Char ->  Bool

isSeparator c  = case  generalCategory  c  of Space                           ->  True LineSeparator           -> True ParagraphSeparator  ->  True

_                                  ->  False

Функция: isAscii

Описание: возвращает значение True, если заданный символ находится в диапазоне символов ASCII. В противном случае возвращается значение False. Определение:

isAscii ::  Char ->  Bool isAscii  c  = c  <  ’\x80’

Функция: isLatin1

Описание: возвращает значение True, если заданный символ находится в диапазоне символов Latin1. В противном случае возвращается значение False. Определение:

isLatin1 ::  Char ->  Bool isLatin1 c  =  c  <= ’\xff’

Функция: isAsciiUpper

Описание: возвращает значение True, если заданный символ  находится в диапазоне символов ASCII и является заглавным (верхний регистр). В противном случае возвращается значение False.

Определение:

isAsciiUpper :: Char ->  Bool isAsciiUpper c  = c  >=  ’A’ &&  c  <= ’Z’

Функция: isAsciiLower

Описание: возвращает значение True, если заданный символ  находится в диапазоне символов ASCII  и является строчным  (нижний  регистр). В противном случае возвращается значение False.

Определение:

isAsciiLower :: Char ->  Bool isAsciiLower c  = c  >= ’a’ &&  c  <= ’z’

Для описания категории символов в кодировке Unicode имеется специальное перечисление. Каждый  символ принадлежит ровно одной категории. В некоторых функциях, приведённых  ранее, как раз и используется это перечисление.

Тип: GeneralCategory

Описание: представляет категории символов Unicode, как это определено стандартом.

Определение:

data  GeneralCategory

= UppercaseLetter          | LowercaseLetter

| TitlecaseLetter         | ModifierLetter

| OtherLetter                | NonSpacingMark

| SpacingCombiningMark | EnclosingMark

| DecimalNumber             | LetterNumber

| OtherNumber                  | ConnectorPunctuation

| DashPunctuation            | OpenPunctuation

| ClosePunctuation        | InitialQuote

| FinalQuote                   | OtherPunctuation

| MathSymbol                   | CurrencySymbol

| ModifierSymbol            | OtherSymbol

| Space                             | LineSeparator

| ParagraphSeparator     | Control

| Format                            | Surrogate

| PrivateUse                   | NotAssigned

deriving (Eq,  Ord,  Enum, Read, Show, Bounded, Ix)

Как видно из определения, для этого перечисления автоматически определяются экземпляры следующих классов: Bounded, Enum, Eq, Ix, Ord, Read и Show.

Сами категории символов могут быть поняты из наименований конструкторов типа GeneralCategory. Например, конструктор CurrencySymbol отвечает за категорию символов, представляющих собой знаки валют.

Функция: generalCategory

Описание: возвращает категорию Unicode для заданного символа.

Определение:

generalCategory :: Char ->  GeneralCategory

Функция определена в виде примитива.

Функция: toUpper

Описание: возвращает соответствующий  заданному символу символ  в верхнем регистре (например, для символа ’a’ возвращается символ ’A’).

Определение:

toUpper  ::  Char ->  Char

Функция определена в виде примитива.

Функция: toLower

Описание: возвращает соответствующий  заданному символу символ  в нижнем регистре (например, для символа ’Z’ возвращается символ ’z’).

Определение:

toLower  ::  Char ->  Char

Функция определена в виде примитива.

Функция: toTitle

Описание: возвращает соответствующий  заданному символу символ в виде, используемом для заголовков. Эта функция возвращает новые символы для небольшого числа лигатур, для символов в нижнем регистре возвращаются соответствующие символы в верхнем регистре, остальные символы возвращаются неизменёнными.

Определение:

toTitle ::  Char ->  Char

Функция определена в виде примитива.

Функция: digitToInt

Описание: возвращает числовое представление заданного символа в восьмиричной, десятичной или шестнадцатиричной системах  счисления. Для остальных символов функция возвращает ошибку.

Определение:

digitToInt ::  Char  ->  Int

digitToInt c  | isDigit c                      = ord  c   ord  ’0’

| c  >= ’a’ &&  c  <= ’f’ = ord  c  ord  ’a’ + 10

| c  >= ’A’ &&  c  <= ’F’ = ord  c  ord  ’A’ + 10

| otherwise                    = error ("Char.digitToInt: not  a digit " ++  show c)

Функция: intToDigit

Описание: обратная функция к функции digitToInt. Возвращает символ для заданной восьмиричной, десятичной или шестнадцатиричной цифры. Если заданное значение не является цифрой, функция возвращает ошибку.

Определение:

intToDigit :: Int  ->  Char

intToDigit i | i >= 0   &&  i <=   9 = toEnum (fromEnum  ’0’ + i)

| i >= 10 &&  i <= 15 = toEnum (fromEnum ’a’ + i 10)

| otherwise                 = error "Char.intToDigit: not  a digit"

Функция: ord

Описание: синоним метода fromEnum из класса Ord (см. стр. 121).  Возвращает код заданного символа.

Определение:

ord  ::  Char  ->  Int ord  =  fromEnum

Функция: chr

Описание: синоним метода toEnum из класса Ord (см. стр. 121). Возвращает символ для заданного кода.

Определение:

chr  :: Int  ->  Char chr  =  toEnum

Функции  showLitChar,  lexLitChar, readLitChar на текущий  момент  реимпортируются из модуля Prelude. См. соответственно стр. 161, стр. 143 и стр. 155.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии