Spec-Zone.ru › Haskell 7

Data.Символ

Copyright (c) The University of Glasgow 2001
License BSD-style (see the file libraries/base/LICENSE)
Maintainer libraries@haskell.org
Stability stable
Portability portable
Safe Haskell Trustworthy
Language Haskell2010

Содержание

  • Классификация символов
    • Поддиапазоны
    • Общие категории Unicode
  • Преобразование регистра
  • Символы одной цифры
  • Числовые представления
  • Строковые представления

Описание

Тип Char и связанные операции.

data Char :: * Source

Тип символа Char представляет собой перечисление, значения которого представляют символы Unicode (или эквивалентно ISO/IEC 10646) (см. http://www.unicode.org/ для получения подробной информации). Это множество расширяет кодировку символов ISO 8859-1 (Latin-1) (первые 256 символов), которая сама по себе является расширением кодировки символов ASCII (первые 128 символов). Символьный литерал в Haskell имеет тип Char.

Для преобразования Char в соответствующее значение Int, определенное Unicode, или наоборот, используйте toEnum и fromEnum из класса Enum соответственно (или эквивалентно ord и chr).

Экземпляры

Bounded Char
Enum Char
Eq Char
Data Char
Ord Char
Read Char
Show Char
Ix Char
Generic Char
Storable Char
IsChar Char
PrintfArg Char
IsString [Char]
type Rep Char

Классификация символов

Символы Unicode делятся на буквы, цифры, знаки, пунктуацию, символы, разделители (включая пробелы) и другие (включая управляющие символы).

isControl :: Char -> Bool Source

Выбирает управляющие символы, которые являются непечатаемыми символами подмножества Latin-1 Unicode.

isSpace :: Char -> Bool Source

Возвращает True для любого символа пробела Unicode и управляющих символов \t, \n, \r, \f, \v.

isLower :: Char -> Bool Source

Выбирает строчные буквенные символы Unicode (буквы).

isUpper :: Char -> Bool Source

Выбирает прописные или заглавные буквенные символы Unicode (буквы). Заглавный регистр используется небольшим числом буквенных лигатур, таких как односимвольная форма Lj.

isAlpha :: Char -> Bool Source

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

isAlphaNum :: Char -> Bool Source

Выбирает буквенные или числовые символы Unicode.

Обратите внимание, что числовые цифры за пределами диапазона ASCII выбираются этой функцией, но не isDigit. Такие цифры могут быть частью идентификаторов, но не используются принтером и ридером для представления чисел.

isPrint :: Char -> Bool Source

Выбирает печатаемые символы Unicode (буквы, цифры, знаки, пунктуацию, символы и пробелы).

isDigit :: Char -> Bool Source

Выбирает цифры ASCII, т. е. '0'..'9'.

isOctDigit :: Char -> Bool Source

Выбирает восьмеричные цифры ASCII, т. е. '0'..'7'.

isHexDigit :: Char -> Bool Source

Выбирает шестнадцатеричные цифры ASCII, т. е. '0'..'9', 'a'..'f', 'A'..'F'.

isLetter :: Char -> Bool Source

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

Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategorys, или False в противном случае:

  • UppercaseLetter
  • LowercaseLetter
  • TitlecaseLetter
  • ModifierLetter
  • OtherLetter

Эти классы определены в Базе данных символов Unicode, которая является частью стандарта Unicode. В этом же документе определено, что является и не является «буквой».

Примеры

Базовое использование:

>>> isLetter 'a'
True
>>> isLetter 'A'
True
>>> isLetter '0'
False
>>> isLetter '%'
False
>>> isLetter '♥'
False
>>> isLetter '\31'
False

Убедитесь, что isLetter и isAlpha эквивалентны.

>>> let chars = [(chr 0)..]
>>> let letters = map isLetter chars
>>> let alphas = map isAlpha chars
>>> letters == alphas
True

isMark :: Char -> Bool Source

Выбирает символы-знаки Unicode, например, акценты и тому подобное, которые сочетаются с предшествующими символами.

Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategorys, или False в противном случае:

  • NonSpacingMark
  • SpacingCombiningMark
  • EnclosingMark

Эти классы определены в Базе данных символов Unicode, которая является частью стандарта Unicode. В этом же документе определено, что является и не является «знаком».

Примеры

Базовое использование:

>>> isMark 'a'
False
>>> isMark '0'
False

Сочетающиеся знаки, такие как акцентные символы, обычно должны следовать за другим символом, прежде чем они станут печатаемыми:

>>> map isMark "ò"
[False,True]

Каламбуры не обязательно поддерживаются:

>>> isMark '✓'
False

isNumber :: Char -> Bool Source

Выбирает числовые символы Unicode, включая цифры из различных скриптов, римские цифры и т. д.

Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategorys, или False в противном случае:

  • DecimalNumber
  • LetterNumber
  • OtherNumber

Эти классы определены в Базе данных символов Юникода, которая является частью стандарта Юникода. В этом же документе определено, что является, а что не является "Числом".

Примеры

Основное использование:

>>> isNumber 'a'
False
>>> isNumber '%'
False
>>> isNumber '3'
True

ASCII '0' по '9' являются числами:

>>> and $ map isNumber ['0'..'9']
True

Числами Юникода также являются римские цифры:

>>> isNumber 'Ⅸ'
True

isPunctuation :: Char -> Bool Исходный код

Выбирает символы пунктуации Юникода, включая различные виды соединителей, скобок и кавычек.

Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategorys, или False в противном случае:

  • ConnectorPunctuation
  • DashPunctuation
  • OpenPunctuation
  • ClosePunctuation
  • InitialQuote
  • FinalQuote
  • OtherPunctuation

Эти классы определены в Базе данных символов Юникода, которая является частью стандарта Юникода. В этом же документе определено, что является, а что не является "Пунктуацией".

Примеры

Основное использование:

>>> isPunctuation 'a'
False
>>> isPunctuation '7'
False
>>> isPunctuation '♥'
False
>>> isPunctuation '"'
True
>>> isPunctuation '?'
True
>>> isPunctuation '—'
True

isSymbol :: Char -> Bool Исходный код

Выбирает символы Юникода, включая математические и валютные символы.

Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategorys, или False в противном случае:

  • MathSymbol
  • CurrencySymbol
  • ModifierSymbol
  • OtherSymbol

Эти классы определены в Базе данных символов Юникода, которая является частью стандарта Юникода. В этом же документе определено, что является, а что не является "Символом".

Примеры

Основное использование:

>>> isSymbol 'a'
False
>>> isSymbol '6'
False
>>> isSymbol '='
True

Определение "математического символа" может быть несколько не интуитивно понятным в зависимости от вашего опыта:

>>> isSymbol '+'
True
>>> isSymbol '-'
False

isSeparator :: Char -> Bool Исходный код

Выбирает символы пробелов и разделителей Юникода.

Эта функция возвращает True если её аргумент имеет один из следующих GeneralCategorys, или False в противном случае:

  • Space
  • LineSeparator
  • ParagraphSeparator

Эти классы определены в Базе данных символов Юникода, которая является частью стандарта Юникода. В этом же документе определено, что является, а что не является "Разделителем".

Примеры

Основное использование:

>>> isSeparator 'a'
False
>>> isSeparator '6'
False
>>> isSeparator ' '
True

Предупреждение: символы новой строки и табуляции не считаются разделителями.

>>> isSeparator '\n'
False
>>> isSeparator '\t'
False

Но некоторые более экзотические символы являются (например,   HTML):

>>> isSeparator '\160'
True

Поддиапазоны

isAscii :: Char -> Bool Исходный код

Выбирает первые 128 символов набора символов Юникода, соответствующие набору символов ASCII.

isLatin1 :: Char -> Bool Исходный код

Выбирает первые 256 символов набора символов Юникода, соответствующие набору символов ISO 8859-1 (Latin-1).

isAsciiUpper :: Char -> Bool Исходный код

Выбирает заглавные буквы ASCII, т.е. символы, удовлетворяющие как isAscii , так и isUpper.

isAsciiLower :: Char -> Bool Исходный код

Выбирает строчные буквы ASCII, т.е. символы, удовлетворяющие как isAscii , так и isLower.

Общие категории Юникода

data GeneralCategory Исходный код

Общие категории Юникода (колонка 2 таблицы UnicodeData) в порядке их перечисления в стандарте Юникода (в частности, в базе данных символов Юникода).

Примеры

Основное использование:

>>> :t OtherLetter
OtherLetter :: GeneralCategory

Eq пример:

>>> UppercaseLetter == UppercaseLetter
True
>>> UppercaseLetter == LowercaseLetter
False

Ord пример:

>>> NonSpacingMark <= MathSymbol
True

Enum пример:

>>> enumFromTo ModifierLetter SpacingCombiningMark
[ModifierLetter,OtherLetter,NonSpacingMark,SpacingCombiningMark]

Read пример:

>>> read "DashPunctuation" :: GeneralCategory
DashPunctuation
>>> read "17" :: GeneralCategory
*** Exception: Prelude.read: no parse

Show пример:

>>> show EnclosingMark
"EnclosingMark"

Bounded пример:

>>> minBound :: GeneralCategory
UppercaseLetter
>>> maxBound :: GeneralCategory
NotAssigned

Ix пример:

>>> import Data.Ix ( index )
>>> index (OtherLetter,Control) FinalQuote
12
>>> index (OtherLetter,Control) Format
*** Exception: Error in array index

Конструкторы

UppercaseLetter

Lu: Буква, заглавная

LowercaseLetter

Ll: Буква, строчная

TitlecaseLetter

Lt: Буква, заглавная (начальная)

ModifierLetter

Lm: Модификатор буквы

OtherLetter

Lo: Другая буква

NonSpacingMark

Mn: Диакритический знак, неразрывный

SpacingCombiningMark

Mc: Диакритический знак, разрывный

EnclosingMark

Me: Охватывающий знак

DecimalNumber

Nd: Десятичное число

LetterNumber

Nl: Буквенное число

OtherNumber

No: Другое число

ConnectorPunctuation

Pc: Соединительный знак препинания

DashPunctuation

Pd: Тире

OpenPunctuation

Ps: Открывающая скобка

ClosePunctuation

Pe: Закрывающая скобка

InitialQuote

Pi: Начальная кавычка

FinalQuote

Pf: Конечная кавычка

OtherPunctuation

Po: Другой знак препинания

MathSymbol

Sm: Математический символ

CurrencySymbol

Sc: Символ валюты

ModifierSymbol

Sk: Модификатор символа

OtherSymbol

So: Другой символ

Space

Zs: Пробел

LineSeparator

Zl: Разделитель строк

ParagraphSeparator

Zp: Разделитель абзацев

Control

Cc: Управляющий символ

Format

Cf: Форматный символ

Surrogate

Cs: Заместитель

PrivateUse

Co: Символ частного использования

NotAssigned

Cn: Не назначенный символ

Примеры реализации

Bounded GeneralCategory
Enum GeneralCategory
Eq GeneralCategory
Ord GeneralCategory
Read GeneralCategory
Show GeneralCategory
Ix GeneralCategory

generalCategory :: Символ -> GeneralCategory Исходный код

Общепринятая категория Unicode символа. Это зависит от Enum реализации GeneralCategory, порядок которой должен соответствовать порядку категорий в стандарте Unicode.

Примеры

Базовое использование:

>>> generalCategory 'a'
LowercaseLetter
>>> generalCategory 'A'
UppercaseLetter
>>> generalCategory '0'
DecimalNumber
>>> generalCategory '%'
OtherPunctuation
>>> generalCategory '♥'
OtherSymbol
>>> generalCategory '\31'
Control
>>> generalCategory ' '
Space

Преобразование регистра

toUpper :: Символ -> Символ Исходный код

Преобразует букву в соответствующую заглавную букву, если такая существует. Любой другой символ возвращается без изменений.

toLower :: Символ -> Символ Исходный код

Преобразует букву в соответствующую строчную букву, если такая существует. Любой другой символ возвращается без изменений.

toTitle :: Символ -> Символ Исходный код

Преобразует букву в соответствующую заглавную букву (или букву заглавного регистра), если такая существует. Заглавный регистр отличается от верхнего регистра только для небольшого числа лигатурных букв. Любой другой символ возвращается без изменений.

Символы-цифры

digitToInt :: Символ -> Целое Исходный код

Преобразует одиночную цифру Char в соответствующее целое число. Эта функция завершается неудачей, если ее аргумент не соответствует isHexDigit, но она распознает как заглавные, так и строчные шестнадцатеричные цифры (то есть '0'..'9', 'a'..'f', 'A'..'F').

Примеры

Символы '0' до '9' правильно преобразуются в 0..9:

>>> map digitToInt ['0'..'9']
[0,1,2,3,4,5,6,7,8,9]

Как заглавные, так и строчные 'A' до 'F' также преобразуются в 10..15.

>>> map digitToInt ['a'..'f']
[10,11,12,13,14,15]
>>> map digitToInt ['A'..'F']
[10,11,12,13,14,15]

В противном случае возникает исключение:

>>> digitToInt 'G'
*** Exception: Char.digitToInt: not a digit 'G'
>>> digitToInt '♥'
*** Exception: Char.digitToInt: not a digit '\9829'

intToDigit :: Целое -> Символ Исходный код

Преобразует целое число в диапазоне 0..15 в соответствующий одиночный символ-цифру. Эта функция завершается неудачей для других входных данных и генерирует строчные шестнадцатеричные цифры.

Числовые представления

ord :: Символ -> Целое Исходный код

Метод fromEnum ограничен типом Char.

chr :: Целое -> Символ Исходный код

Метод toEnum ограничен типом Char.

Представления строк

showLitChar :: Символ -> ShowS Исходный код

Преобразует символ в строку, используя только печатаемые символы и соглашения об экранировании языка Haskell. Например:

showLitChar '\n' s  =  "\\n" ++ s

lexLitChar :: ReadS Строка Исходный код

Чтение строкового представления символа, используя соглашения об экранировании языка Haskell. Например:

lexLitChar  "\\nHello"  =  [("\\n", "Hello")]

readLitChar :: ReadS Символ Исходный код

Чтение строкового представления символа, используя соглашения об экранировании языка Haskell, и преобразование его в символ, который он кодирует. Например:

readLitChar "\\nHello"  =  [('\n', "Hello")]

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/Data-Char.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API