Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОІТ.docx
Скачиваний:
1
Добавлен:
16.08.2019
Размер:
115.47 Кб
Скачать

Підсписок.

Розглянемо відношення підсписок який має 2 аргументи: список S який міститься в L в якості підсписку.

підсписок([c, d, e], [a, b, c, d, e, f]) буде істинне

підсписок([c, e], [a, b, c, d, e, f]) буде хибним

Відношення підсписок модна задати використовуючи таке формулювання S є підсписком L якщо L можна розбити на 2 списки L1 і L2 , а L2 можна розбити на 2 списки S і L3.

Для розбиття списків можна використати відношення конк:

підсписок(S, L) :- конк(L1, L2, L), конк(S, L3, L2).

?- підсписок(S, [a, b, c]).

Відповідь:

S = [a, b, c];

S = [a, b];

S = [b, c];

S = [a];

S = [b];

S = [c];

S = [];

Перестановки.

Запишемо відношення перестановка з двома аргументами: 2 списки один з яких буде перестановкою іншого. Процедура для відношення перестановка базується на двох правилах:

  1. Якщо перший список порожній то і другий має бути порожнім. перестановка([], []).

  2. Якщо перший список не порожній то він має вигляд [X|L] і перестановку такого списку можна зробити так: спочатку отримати список L1 який є перестановкою L, а потім вставити X у довільну позицію L1.

перестановка([X|L], P):- перестановка(L, L1),вставити(X,L1,P).

?- перестановка([a, b, c], P).

Відповідь:

P = [b, c, a];

P = [c, a, b];

Написати відношення перестановка1 яке би будувало перестановки використовуючи відношення вилучення.