Логические функции, функции сравнения, функции работы с перечислимыми типами данных.
В 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; просмотров: 485; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!