Задание 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)]).