1. Определите отношение последний(Элемент, Список) так, чтобы Элемент являлся последним элементом списка Список. Напишите два варианта определения: с использованием отношения append и без него.
2. Используя отношение append, напишите предикат, соответствующий вычеркиванию трех последних элементов списка L, результат – новый список L1. Указание: L- конкатенция L1 и трехэлементного списка.
3. Напишите последовательность целей для порождения списка L2, получающегося из списка L вычеркиванием его трех первых и трех последних элементов.
4. Определите два предиката: четнаядлина(Список) и нечетнаядлина(Список) таким образом, чтобы они были истинными, если их аргументом является список четной или нечетной длины соответственно. Например, [a,b,c,d] – имеет четную длину, а [a,b,c] – имеет нечетную длину.
5. Определите отношение обращение(Список, Список), которое обращает список, например обращение([a,b,c,d], [d,c,b,a]).
6. Определите предикат: палиндром(Список) таким образом, чтобы он был истинным, если список слева направо и справа налево читается одинаково. Например, [a,b,c,b,a].
7. Определите отношение сдвиг(Список1, Список2) таким образом, чтобы Список2 представлял собой Список1, циклически сдвинутый влево на один символ. Например, сдвиг([a,b,c,d], L), L=[b,c,d,a]
8. Определите предикат: максспис(Список,Макс) – поиск максимального элемента в списке.
9. Определите предикат: сумспис(Список,Сумма) –суммирование элементов списка.
10. Определите предикат: упорядоченный(Список) таким образом, чтобы он был истинным, если список упорядочен по возрастанию или убыванию. Например, [1,2,3,4,5].
11. * Определите отношение удалить_подсписок(Список1, Список2, Список) таким образом, чтобы из списка Список2 удалялся подсписок Список1, в результате чего получаем список Список. Например, удалить_подсписок([1,2,3,4],[2,3],L), L=[1,4]
12. * Определите отношение разбиение_списка(Список,Список1,Список2) так, чтобы оно распределяло элементы списка между двумя списками Список1 и Список2 и чтобы эти списки были примерно одинаковой длины. Например,
разбиение_списка([a,b,c,d,e], [a,c,e],[b,d])
13. * Определите процедуру между(N1,N2,X), которая с помощью перебора порождает список Х всех целых чисел, отвечающие условию N1 ? х ? N2.
14. Удалить все повторные вхождения элементов в список. Например: [1,2,2,3] ? [1,2,3].
15. Подсчитать число элементов списка без какого-либо указываемого элемента.
16. Подсчитать число определенных символов в списке.
17. Имеется список, каждый элемент которого, в свою очередь является списком. Найти среднее арифметическое последних элементов элементов-списков.
18. Имеется список, каждый элемент которого, в свою очередь является списком. Вывести самый короткий и самый длинный элементы-списки.
19. Имеется список, каждый элемент которого, в свою очередь является списком. Отсортировать список верхнего уровня (по длине элементов-списков второго уровня).
20. Отсортировать слова в списке по алфавиту.
21. Подсчитать число букв в каждом слове строки и сформировать список, в качестве элементов которого используются числа, полученные в результате подсчета.
22. Сдвинуть циклически список вправо на определенное число элементов.
23. Сдвинуть циклически список влево на определенное число элементов.
Заметьте, что это не предложение Пролога, а лишь сплошная структура данных.
