Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LP_5(Списки)).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
201.73 Кб
Скачать

7. Списки в Прологе

    1. Определение и унификация

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

Как структура данных Пролога, они имеют следующий синтаксис

  • они всегда заключаются в квадратные скобки и

  • каждый элемент списка отделяется запятой.

Вот примеры списков

[a,fred,A_Variable,ququ]

[a, b, c, d, e, f, г]

[apple,pear,bananas,bedfruit]

[] /* это - пустой спискок, */

Существует специальный символ | (чёрточка, англ. - bar) , чтобы отделить первый элемент списка (называемую головой ) от остальной части списка (известную как хвост).

Для примера рассмотрим шаблон [A|B] и следующий список [first,second,third]

При унификации A свяжется с первым элементом списка, а B с остатком списка, т.е. получится

A=first и B=[second,third]

      1. Упражнения на унификацию

Список

Шаблон

Результат

1

[a, b, c]

[Head|Tail]

Head=a

Tail=[b, c]

2

[a]

[H|T]

H=a

T=[]

3

[]

[H|T]

false.

4

[[]]

[B|Rest]

B = Rest, Rest = [].

!! На самом деле: B = [],Rest = [] !!

5

[a, b, c]

[a|T]

T=[b, c] (унифицируется только переменная!)

6

[a, b, c]

[b|T]

false.

7

[]

[]

true.

Два пустых списка всегда согласовываются

Рассмотрим ещё несколько примеров

?- [One, Two | T] = [яблоко, малина, черника, milk].

One = яблоко,

Two = малина,

T = [черника, milk].

?- [X,Y|T] = [a|Z].

X = a,

Z = [Y|T].

Здесь Z=[Y|T], а поскольку это переменная, которой надо иметь значение.

?- [H|T] = [груша, Z].

H = груша,

T = [Z].

Если бы было сравнение[…,T]=[…,Z], то унификация была бы Z=T

Найдите результаты унификации следующих списков (для одного из них унификация неуспешна).

Список

шаблон

ответ

[a, d, z, c]

[H|T]

H=a,

T=[d, z, c]

[маша,даша,саша]

[A,даша|Rest]

A = маша,

Rest = [саша].

[a|Rest]

[a, b, c]

Rest=[b, c]

[a,[]]

[ A,B|Rest]

A = a,

B = Rest,

Rest = [].

(см №4 из упр7.1.1. )

[One]

[two|[]]

One=two

[one]

[Two]

Two=one

[a, b, X]

[a, b, c, d]

false.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]