В императивных языках, как правило, основной структурой данных являются массивы. В Прологе – это списки.
Список – последовательность элементов одного типа. Задается перечислением элементов через запятую в квадратных скобках. Например, [джек, джон, фред] или [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, а хвост – пустой список [] .
Если достаточное число раз отделить первый элемент списка, то получим пустой список. Операция "|" как раз позволяет разделить список на хвост и голову или, наоборот, приписать элемент (элементы) к началу списка.
Основным механизмом обработки списков является рекурсия. Просматривается и обрабатывается каждый элемент, пока не будет достигнут конец. Обычно требуется два правила. Первое говорит о том, что делать с пустым списком (базис рекурсии). Второе – о том, что делать с обычным списком, который можно разделить на голову и хвост (рекурсивный переход).
Рассмотрим примеры.







