Функции работы со строками и множествами.



 

       Распространенной областью применения 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!