Списки в Прологе – 1

В императивных языках, как правило, основной структурой данных являются массивы. В Прологе – это списки.

Список – последовательность элементов одного типа. Задается перечислением элементов через запятую в квадратных скобках. Например, [джек, джон, фред] или [3,1,8,0,34,9] или ['a', 'b', 'c', 'd'].

Запись []  обозначает пустой список, т.е. не содержащий элементов.

Элементы списка могут иметь любой тип (числа, строки, символы). В частности, элементами списка могут быть сами списки.

Чтобы использовать список, надо сначала описать его тип. Новые типы данных, которые вводит пользователь, описываются в разделе Domains (аналогичен разделу Type в Паскале и помещается вначале программы).

Например (звездочка обозначает список),

Domains

intlist = integer*   % новый тип – список из целых чисел

symlist = symbol*    % новый тип – список из строк

Любой список, кроме пустого, можно разбить на «голову» – первый элемент этого списка, и «хвост» – все его остальные элементы. Хвост списка – всегда список, а голова – всегда элемент.

Например, голова списка [3, 1, 8, 0, 34, 9]  – число 3, а хвост – список  [1, 8, 0, 34, 9] . Голова списка [3]  – число 3, а хвост – пустой список  [] .

Если достаточное число раз отделить первый элемент списка, то получим пустой список. Операция "|" как раз позволяет разделить список на хвост и голову или, наоборот, приписать элемент (элементы) к началу списка.

Основным механизмом обработки списков является рекурсия. Просматривается и обрабатывается каждый элемент, пока не будет достигнут конец. Обычно требуется два правила. Первое говорит о том, что делать с пустым списком (базис рекурсии). Второе – о том, что делать с обычным списком, который можно разделить на голову и хвост (рекурсивный переход).

Рассмотрим примеры.

Похожие записи

Добавить комментарий