Опубликован: 19.09.2008 | Доступ: свободный | Студентов: 656 / 70 | Оценка: 4.50 / 5.00 | Длительность: 21:25:00
Лекция 20:

Утилиты работы с символами

< Лекция 19 || Лекция 20: 12 || Лекция 21 >
Аннотация: В этой лекции дается описание работы с символами. Здесь мы рассмотрим представление символов в различных кодировках в основном это Unicode, ASCII и latin-1. Рассмотри модуль и библиотеку Char

module Char ( 
    isAscii, isLatin1, isControl, isPrint, isSpace, isUpper, isLower, 
    isAlpha, isDigit, isOctDigit, isHexDigit, isAlphaNum, 
    digitToInt, intToDigit,
    toUpper, toLower,
    ord, chr,
    readLitChar, showLitChar, lexLitChar,

- ...и то, что экспортирует Prelude
    Char, String
    ) where

isAscii, isLatin1, isControl, isPrint, isSpace, isUpper, isLower, 
 isAlpha, isDigit, isOctDigit, isHexDigit, isAlphaNum :: Char -> Bool

toUpper, toLower        :: Char -> Char

digitToInt :: Char -> Int
intToDigit :: Int -> Char

ord        :: Char -> Int
chr        :: Int  -> Char

lexLitChar  :: ReadS String
readLitChar :: ReadS Char
showLitChar :: Char -> ShowS

Эта библиотека предоставляет ограниченный набор операций над символами Unicode. Первые 128 элементов этого набора символов идентичны набору символов ASCII ; следующие 128 элементов образуют остаток набора символов Latin 1. Этот модуль предлагает только ограниченное представление полного набора символов Unicode ; полный набор атрибутов символов Unicode в этой библиотеке недоступен.

Символы Unicode можно разделить на пять общих категорий: непечатаемые символы, строчные алфавитные символы, остальные алфавитные символы, числовые цифры и остальные печатаемые символы. В Haskell любой алфавитный символ, который не является строчной буквой, рассматривается как заглавный символ (верхнего регистра) ( Unicode на самом деле имеет три регистра: верхний, нижний и заглавный). Числовые цифры могут являться частью идентификаторов, но цифры вне диапазона ASCII не должны использоваться читателем для обозначения чисел.

Для каждого вида символов Unicode выполняются следующие предикаты, которые возвращают True:

Тип символов Предикаты
Строчные алфавитные символы isPrint isAlphaNum isAlpha isLower
Остальные алфавитные символы isPrint isAlphaNum isAlpha isLower
Цифры isPrint isAlphaNum
Остальные печатаемые символы isPrint
Непечатаемые символы

Функции isDigit, isOctDigit и isHexDigit выбирают только символы ASCII. intToDigit и digitToInt осуществляют преобразование между одной цифрой Char и соответствующим Int. digitToInt завершается неуспешно, если ее аргумент не удовлетворяет условию isHexDigit, но она распознает шестнадцатиричные цифры как в верхнем, так и в нижнем регистрах (т.е. '0' .. '9', 'a'.. 'f', 'A' .. 'F'). intToDigit завершается неуспешно, если ее аргумент не находится в диапазоне 0.. 15; она генерирует шестнадцатиричные цифры в нижнем регистре.

Функция isSpace распознает пробельные символы только в диапазоне Latin 1.

Функция showLitChar преобразует символ в строку, используя только печатаемые символы и соглашения исходного языка Haskell об эскейп-символах. Функция lexLitChar делает обратное, возвращая последовательность символов, которые кодируют символ. Функция readLitChar делает то же самое, но кроме того осуществляет преобразование к символу, который это кодирует. Например:

showLitChar '\n' s       =  "\\n" ++ s
  lexLitChar  "\\nЗдравствуйте"   =  [("\\n", "Здравствуйте")]
  readLitChar "\\nЗдравствуйте"   =  [('\n', "Здравствуйте")]

Функция toUpper преобразовывает букву в соответствующую заглавную букву, оставляя все остальные символы без изменений. Любая буква Unicode, которая имеет эквивалент в верхнем регистре, подвергается преобразованию. Аналогично, toLower преобразовывает букву в соответствующую строчную букву, оставляя все остальные символы без изменений.

Функции ord и chr являются функциями fromEnum и toEnum, ограниченными типом Char.

< Лекция 19 || Лекция 20: 12 || Лекция 21 >
Николай Щербаков
Николай Щербаков
Россия, Москва
Олег Корсак
Олег Корсак
Латвия, Рига