Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Голова и хвост списка

Список является рекурсивным составным объектом. Он состоит из двух

частей - головы, которой является первый элемент, и хвоста, которым явля-

ется список, включающий все последующие элементы. Хвост списка - всегда

список, голова списка - всегда элемент. Например:

головой [a, b, c] является a,

хвостом [a, b, c] является [b, c]

Что происходит, когда вы доходите до одноэлементного списка? Ответ

таков:

голова [c] есть c

хвост [c] есть []

Если выбирать первый элемент списка достаточное количество раз, вы

обязательно дойдете до пустого списка ([]).

Пустой список нельзя разделить на голову и хвост.

В концептуальном плане это значит, что список имеет структуру дере-

ва, как и другие составные объекты. Структура дерева [a, b, c, d] такова:

list

/ \

a list

/ \

b list

/ \

c list

/ \

d []

Далее. Одноэлементный список, как например [a], не то же самое, что

элемент, который в него входит, потому что [a] на самом деле - это сос-

тавная структура данных, как здесь показано:

list

/ \

a []

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

В Прологе есть способ отделить голову от хвоста. Вместо разделения

элементов запятыми, можно отделить голову от хвоста вертикальной чертой

(|). Например:

[a, b, c] эквивалентно [a|[b, c]]

и, продолжая процесс

[a|[b, c]] эквивалентно [a|[b|[c]]]

что эквивалентно [a|[b|[c[]]]]

Можно использовать оба вида разделителей в одном и том-же списке при

условии, что вертикальная черта есть последний разделитель. Так, что при

желании можно набрать [a, b, c, d] как [a, b |[c, d]]. В таблице 8.1 вы

найдете другие примеры.

Таблица 8.1: Головы и Хвосты Списков

-----------------------------------------------------------------

Список Голова Хвост

-----------------------------------------------------------------

['a', 'b', 'c'] 'a' ['b', 'c']

['a'] 'a' []/* пустой список*/

[] неопределено неопределено

[[1, 2, 3], [2, 3, 4], []] [1, 2, 3] [[2, 3, 4], []]

-----------------------------------------------------------------

В таблице 8.2 несколько примеров на присвоение в списках.

-----------------------------------------------------------------

Список 1 Список 2 Присвоение переменным

-----------------------------------------------------------------

[x, y, z] [эгберт, ест, мороженое] x=эгберт,y=ест,z=мороженое

[7] [x | y] x=7, y=[]

[1, 2, 3, 4] [x, y | z] x=1, y=2, z=[3,4]

[1, 2] [3 | x] отказ

-----------------------------------------------------------------

Соседние файлы в папке Документация