Функции работы со строками и множествами.
Распространенной областью применения Haskell является синтаксический анализ или парсинг различных строк. В модуле Char определены различные функции работы со строками. Наиболее распространенные и необходимые функции для выполнения данной лабораторной работы приведены в таблице 2.2. Для использования этих функций в тексте собственной программы необходимо подключить модуль, набрав директиву компилятора import и указав после этого имя модуля с заглавной буквы. При проверке же отдельных выражений в интерпретаторе подключение модуля выполняется с помощью :also Char.
Таблица 2.2. Функции модуля Char
Описание | Имя функции | Пример | Примечание |
Код символа | ord :: Char -> Int | ||
Символ с заданным кодом | chr:: Int -> Char | ||
Проверка буквы | isAlpha | ||
Проверка прописной буквы | isUpper | ||
Проверка строчной буквы | isLower | ||
Проверка цифры | isDigit | ||
Проверка восьмеричной цифры | isOctDigit | ||
Проверка шестнадцатеричной цифры | isHexDigit | ||
Проверка буквы или цифры | isAlphaNum | ||
Преобразование цифры в число | digitToInt | преобразовывает шестнадцатиричные цифры в любом регистре | |
Преобразование числа в цифру | intToDigit | преобразовывает число в шестнадцатиричную цифру в нижнем регистре | |
Преобразование буквы в прописную | toUpper | не изменяет символов, не являющихся строчными буквами | |
Преобразование буквы в строчную | toLower | не изменяет символов, не являющихся прописными буквами |
|
|
В модуле List имеются несколько полезных функций, позволяющих работать со списками как с множествами в математическом определении. В следующей таблице эти функции приведены.
Таблица 2.3. Функции модуля List для работы с множествами
Описание | Имя функции | Пример | Примечание |
Преобразование списка во множество | nub | удаляет из списка повторяющиеся элементы | |
Объединение | union | ||
Пересечение | intersect | ||
Разность | \\ | инфиксная операция |
Сообщения об ошибках и преобразования типов
В предыдущем разделе в таблице 2.2 упоминалась функция digitToInt для преобразования символа в число. А как преобразовать в число целую строку? Можно, конечно, написать рекурсивную функцию последовательно применяющую digitToInt к каждому символу строки. Но можно поступить проще и использовать функцию show. Более того, с помощью этой функции можно преобразовать в строку и очень многие другие типы данных:
,Нельзя применять эту функцию к данным типа функции или к типам, определенным пользователем, если специально не предусмотреть такое преобразование.
|
|
Преобразование строк в другие типы данных можно осуществить с помощью функции read. Чтобы указать компилятору, в какой именно тип данных необходимо преобразовать строку можно, во-первых, применить к выражению какую-то функцию, применимую к этому типу данных:
и компилятор попробует «догадаться», какой именно тип вы имели в виду. Во-вторых, можно просто указать нужный тип данных:
Рассмотрим следующую простенькую задачу – пусть наша функция должна вернуть длину заданного непустого списка или напечатать сообщение «null list» в случае пустого списка. Если попробовать определить функцию так:
,
то компилятор выдаст ошибку. Почему? А потому, что функция пытается выдать в качестве результата значения разных типов. Можно попробовать, конечно, во второй строке применить к результату функцию show. Но зачем же мы будем вместо числа выдавать строку? В этом случае нам поможет функция error. Она имеет в качестве аргумента строку, обычно это сообщение об ошибке, и возвращает значение произвольного типа, подходящее в любом месте. Если переписать последнюю функцию так:
, то проблем с компиляцией не возникнет, и функция будет работать именно так, как требовалось. Для ленивых существует вариант этой функции – функция undefined, для которой даже аргумента-строки не требуется, она будет возвращать стандартное сообщение об ошибке.
|
|
Дата добавления: 2019-03-09; просмотров: 370; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!