Скачиваний:
22
Добавлен:
22.05.2015
Размер:
137.73 Кб
Скачать

Лабораторная работа 5 Списки

Списки – способ хранения упорядоченных данных произвольного размера. В отличие от массивов, элементы списка могут иметь различные размеры. Достоинства списков – лёгкая вставка новых элементов в список и удаление существующих элементов, а также безопасность обработки списков, так как выход за пределы, как это может случиться с массивами, здесь невозможен. Недостаток списков – невозможность прямой выборки элемента по заданной позиции в списке. Для выборки элемента с заданной позиции необходимо отсоединять от списка по одному элементу до тех пор, пока не будет достигнута заданная позиция.

Операции над списками

Списки обрамляются квадратными скобками. Сформировать список можно посредством перечисления всех его элементов. Например, список первых пяти натуральных чисел связывается с переменной X:

X = [1,2,3,4,5]

Существуют всего две операции над списками. Синтаксически они выглядят идентично, но отличаются потоком параметров.

Первая операция – добавление элемента в список:

X = [1,2,3,4,5] % X - список

Y = [8|X] % Y = [8,1,2,3,4,5]

При этом образуется новый список Y. Элемент слева от вертикальной черты называется головой списка, а справа от вертикальной черты – хвостом списка. Хвост всегда является списком, даже если он пуст. Пустой список обозначается [].

Когда и голова и хвост списка являются входными параметрами, то происходит образование нового списка путём добавления головы к хвосту.

В список сразу можно добавить сразу несколько элементов:

X = [1,2,3,4,5] % X - список

Y = [8,9,10|X] % Y = [8,9,10,1,2,3,4,5]

Вторая операция – выборка элемента из списка:

X = [1,2,3,4,5] % X - список

X = [A|Y] % A=1, Y = [2,3,4,5]

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

В этом примере и голова A и хвост Y являются выходными параметрами. Поэтому унификация списка [A|Y] с известным списком X осуществляет, по сути, расщепление известного списка на голову A и хвост Y.

Из списка можно выбрать сразу несколько элементов:

X = [1,2,3,4,5] % X - список

X = [A,B,C|Y] % A=1, B=2, C=3, Y = [4,5]

Из списка, содержащего один элемент можно совершить операцию выборки. При этом хвост списка становится пустым списком:

X = [1] % X - список

X = [A|Y] % A=1, Y = []

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

Поток параметров в списочных операциях может быть смешанным. В этом случае унификация проверяет наличие в списке заданной головы или/и хвоста.

X = [1,2,3,4,5],

Y = [4,5],

X = [A,B,C|Y], % Унификация успешна: A=1, B=2, C=3

X = [1,2|Z], % Унификация успешна: Z=[3,4,5]

X = [_,E,_|[_,5]], % Унификация успешна: E=2

X = [1|Y], % Унификация неуспешна

Сравнение списков

Visual Prolog позволяет сравнивать списки по условию больше или меньше посредством попарного сравнения элементов. Числовые списки сравниваются до первого ложного сравнения или до конца одного из списков. Если все поэлементные сравнения истины и один из списков стал пустым, то более длинный список считается большим.

[1,2] > [1,1], % Условие истинно

[1,2,1] > [1,2], % Условие истинно

[1,2] > [1,2,0], % Условие ложно

[99,88] > [999], % Условие ложно

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

['b','z'] > ['B','a'], % Условие истинно

['b','z'] > ['B','a','a'], % Условие ложно

Соседние файлы в папке Лабораторные работы