Задания к лабораторной работе 2

Задание 1. Разработать правила, реализующие предикат concat(L1,L2,L3). Предикат удовлетворен, если список L3 является конкатенацией (слиянием) списков L1 и L2 .
Например, ?-concat([a,b],[c,d],[a,b,c,d]). Yes

Задание 2. Разработать правила, реализующие предикат invert(L1,L2). Предикат удовлетворен, если список L2(L1) является инверсией списка L1(L2).
Например, ?-invert([a,b,c],[c,X,a]). X=b

Задание 3. Разработать правила, реализующие предикат uniq(L1,L2). Предикат удовлетворен, если список L2 содержит все элементы L1 без повторений.
Например, ?-uniq([a,b,a,c,d,d],Z). Z=[a,b,c,d]

Задание 4. Разработать правила, реализующие предикат ucat(L1,L2,L3). Предикат удовлетворен, если список L3 содержит все элементы списка L1 и те элементы из списка L2, которых нет в L1.
Например, ?-ucat([a,b,c],[d,c,e,a],Y). Y=[a,b,c,d,e]

Задание 5. Разработать правила, реализующие предикат mapop(Op,L1,L2,L3). Предикат удовлетворен, если i-ый элемент списка L3 представляет собой результат применения инфиксной операции Op к i-ым элементам списков L1 и L2.
Например, ?-mapop(+,[1,2,3],[4,5,6],R). R=[5,7,9]

Задание 6. Разработать правила, реализующие предикат unbr(L1,L2). Предикат удовлетворен, если L1 есть многоуровневый список произвольных элементов, а L2 - одноуровневый список тех же элементов.
Например, ?-unbr([[],[a,[1,[2,d],[]],56],[[[[v],b]]]],Q). Q=[a,1,2,d,56,v,b]

Задание 7. Разработать правила, реализующие предикат msum(L1,L2). Предикат удовлетворен, если L1 есть список списков чисел (произвольной длины), а L2 - список сумм чисел во вложенных списках.
Например, ?-msum([[1,2,3],[],[-12,13]],S). S=[6,0,1]

Задание 8. Разработать правила, реализующие предикат path(From,To,Path) поиска пути в лабиринте из комнаты From в комнату To (Path - список комнат, составляющих путь). Конфигурация лабиринта описывается базой фактов. Пример лабиринта приведен ниже.

Задание 9. Выдается индивидуально преподавателем из следующего списка.

Внимание! Примеры работы предикатов даны в их "очевидной" интепретации. Необходимо иметь в виду недетерминированность языка Пролог и проверить действие предикатов (не задействующих вычисления) во всех "направлениях".
 

Внимание! Для вывода "длинных" списов в полном объеме необходимо выполнить следующий запрос

set_prolog_flag(answer_write_options,[max_depth(0)]).