Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программы классификации 49 9 Программа классифи...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
944.13 Кб
Скачать

3.4. Работа со списками

Списки относятся к структурным объектам Пролога.

Список можно представить как агрегат данных «в ширину», а структуры – «в глубину».

Список в Прологе представляет собой последовательность элементов. Элементами списка могут быть объекты любой природы: числа, строки, символы; простые и составные элементы и сами списки. Список – это структура данных, широко используемая в нечисловом программировании. Для работы со списками используются две фундаментальные операции. Первая из них возвращает первый элемент списка, вторая возвращает список, полученный после удаления первого элемента.

Списки являются одной из основных структур данных Пролога. Список является в некотором смысле аналогом массива в алгоритмических языках программирования. Однако здесь есть существенные отличия. Основным механизмом работы со списками является рекурсия, позволяющая компактно описывать алгоритмы. Для рекурсии не требуется знания точного числа элементов списка, достаточно определения, как правило, головного элемента списка и условия окончания работы рекурсии. Поэтому элементы списков не индексируются, соответственно, количество элементов списка не фиксируется. Фундаментальные операции наряду с рекурсией составляют основу высокоуровневых алгоритмов работы со списками.

Можно также провести аналогию списков Пролога и динамических однонаправленных списковых структур языка Паскаль. От последних их выгодно отличает отсутствие необходимости работать с адресной частью списков.

Для удобства обработки списков в Прологе введены два понятия: голова и хвост. Первый элемент списка (или несколько первых элементов) являются головой списка, а оставшиеся – его хвостом. Тогда список – это структура данных, определяемая следующим образом:

– список является либо пустым,

– либо состоящим из головы и хвоста; головой списка может быть элемент любого типа, а хвост должен быть, в свою очередь, списком.

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

Для обозначения списка используются квадратные скобки, а для отделения головы списка от его хвоста – символ "|". Например, для списка [1 | 2, 3] элемент 1 является головой, а список [2, 3] хвостом. Пустой список обозначается [ ]. Если список не разделяется на голову и хвост, квадратные скобки можно опустить.

Списки можно применять для представления множеств. Некоторые операции над списками примерно те же, что и над множествами:

  • Проверка, является ли некоторый объект элементом списка

  • Объединение, пересечение, разность двух списков

  • Добавление некоторого объекта в список или удаление некоторого объекта из него.