Логические функции, функции сравнения, функции работы с перечислимыми типами данных.
В Haskell имеется булевский тип данных, обозначаемый Bool. К этому типу принадлежат два значения True и False, соответствующие, как легко догадаться, истине и лжи. Из логических функций в Haskell имеются not, && и ||, соответствующие отрицанию, конъюнкции и дизъюнкции. Другие же логические функции можно выразить через эти три. Но тут есть маленькие хитрости, позволяющие пойти более простым путем. Сначала упомянем функции сравнения, они имеют обычный математический смысл:
· < - меньше
· > - больше
· == - равно
· /= - не равно
· >= - ,не менее
· <= - не более.
Теперь поясним, как можно с помощью функций сравнения выразить некоторые другие логические операции. Эквивалентность достаточно заменить сравнением на равенство, сумму по модулю 2 ( исключающее «или») сравнением на неравенство. Импликацию же оказывается можно заменить сравнением «не более». Дело в том, что булевский тип данных у нас перечислимый, то есть, определен четкий порядок перечисления данных этого типа. А именно, значение False идет раньше значения True. Импликация должна принимать ложное значение, только если первый аргумент True, а второй False. Но именно в этом случае сравнение True<=False даст в результате ложь, а во всех остальных случаях результатом будет истина.
Приведем еще несколько функций для работы с упорядоченными и перечислимыми типами данных.
Табл. 1.2 Функции работы с упорядоченными и перечислимыми типами
| Описание | Имя функции | Пример | Примечание |
| Максимум из двух значений | max |
| |
| Минимум из двух значений | min |
| |
| Предыдущее значение | pred |
| может вызвать ошибку времени выполнения, если значение наименьшее из возможных |
| Последующее значение | succ |
| может вызвать ошибку времени выполнения, если значение наибольшее из возможных |
Простейшие списочные и кортежные функции.
Выше уже упоминались списки и кортежи и приводились их примеры. Систематизируем еще раз знания об этих типах данных. Список – это последовательность однотипных элементов, конечная или бесконечная. Ниже приведены примеры нескольких списков:
· Список целых чисел

· Список вещественных чисел

· Список символов (строка)

· Список списков целых чисел

Обратите внимание, что список данных типа Char можно задавать и как список отдельных символов в одинарных кавычках, и как строку в двойных кавычках без квадратных скобок.
Еще одним типом данных в Haskell является кортеж. Кортеж в отличие от списка может содержать разнотипные элементы и заключается в круглые скобки.

В приведенном выше примере первый из кортежей содержит два целых числа, а второй – две строки и целое число. В отличие от списков нет возможности работать с кортежем по индексу элемента, фактически, имеется доступ только к первому и второму элементам кортежа. Ниже в таблице приведены простейшие функции работы со списками. Следует сказать, что Haskell содержит очень много различных функций для работы со списками. Часть из них определена в модуле Prelude, иные в модулях List, Array и некоторых других. Сейчас мы изучим главным образом первые и наиболее простые.
Табл. 1.3. Простейшие списочные и кортежные функции.
| Описание | Имя функции | Пример | Примечание |
| Кортежные функции | |||
| Первый элемент кортежа | fst |
| |
| Второй элемент кортежа | snd |
| |
| Списочные функции | |||
| Первый элемент списка (голова списка) | head |
| |
| Элементы списка, кроме первого (хвост списка) | tail |
| |
| Присоединение элемента к списку | : |
| |
| Длина списка | length |
| |
| Слияние списков (конкатенация) | ++ |
| |
| Первые n элементов списка | take |
| |
| Удаление первых n элементов списка | drop |
| |
| Удаление последнего элемента списка | init |
| |
| Реверсирование списка | reverse |
| |
| Получение элемента по индексу | !! |
| индексация всегда считается с нуля |
| Последний элемент списка | last |
| |
| Проверка принадлежности элемента списку | elem |
| |
| Проверка непринадлежности элемента списку | notElem |
| |
| Генерация списка одинаковых элементов | replicate |
| |
| Максимальный элемент списка | maximum |
| |
| Минимальный элемент списка | minimum |
| |
| Сумма элементов числового списка | sum |
| |
| Произведение элементов числового списка | product |
| |
Дата добавления: 2019-03-09; просмотров: 495; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!
