Процедура Append

Розглянемо другий режим роботи процедури append. Задамо ціль таким чином, щоб елементи списку [1,2,3,4], що стоять перед числом 3 віднести до списку L1, а елементи після числа 3 віднести до списку Т(випадок b).

 

Domains

list=integer*

Predicates

append(list, list, list)

Clauses

append ( [ ], L, L ).

append ( [F| L1 ], L2, [F | L4 ] ):-!, append ( L1, L2, L4).(1)

Goal

append(L1,[3|T],[1,2,3,4]). (2)

Процедури delete і delete1 – вилучають вказаний елемент із списку.

Процедура delete1 – вилучає вказаний елемент, який перший зустрівся в списку.

Domains

list=integer*

Predicates

delete1(integer, list, list)

Goal

delete1 ( 2, [ 1, 2, 2 ], L ).

Clauses

delete1( _, [ ], [ ] ):-!. (1)

delete1( X, [X | L1 ], L1 ):-!. (2)

delete1( X, [ H | L1], [H | L2 ] ):- delete1(X, L1, L2 ). (3)

Вилучити першу 2, що зустрілася у списку [1,2,2]. Результат розміщується у змінну L=[1,2].

Перше умовне твердження істинне, якщо елемент не знайдено. Результат співпадає з вхідним списком.

Друге правило вилучає знайдений елемент. Залишок списку переноситься у новий список.

Третє правило переносить голову списку у новий список, якщо вона не співпадає з елементом, який вилучається. Після цього продовжується пошук елементу, який вилучається.

Процедура delete2 – вилучає всі елементи списку, що дорівнюють вказаному.

Domains

list=integer*

Predicates

delete2(integer, list, list)

Goal

delete2 ( 2, [ 1, 2, 2 ], L ).

Clauses

delete2( _, [ ], [ ] ):-!. (1)

delete2(X, [ X | L1 ], L2 ):-!, delete2( X, L1,L2 ). (2)

delete2( X, [ H | L1], [ H | L2 ] ):- delete2( X, L1,L2 ). (3)

Процедура delete2 відрізняється від процедури delete1 тим, що після того, як вилучено вказаний елемент, вона продовжує пошук вказаного елемента у хвості списку і вилучає всі елементи, що дорівнюють вказаному.

3.2.2 Виконайте завдання свого варіанту за № в журналі.

Продумайте, які стандартні процедури ви можете використати у вашій програмі. Пам'ятайте, що ваша програма буде компактна, якщо ви будете використовувати можливості Прологу - відокремлювати перший елемент від списку у голові правила.

Налагодьте вашу програму за допомогою трасування. Під час трасування переконайтесь, що ваша програма не має зайвих розв'язків або не виконує непотрібних дій.

3.3 Завдання на лабораторну роботу

1. Ввести з клавіатури список цілих чисел. Отримати новий список, вилучивши з початкового усі члени з максимальним значенням.

2. Ввести з клавіатури список дійсних чисел. Якщо у ньому від'ємні та додатні члени чергуються [ +, –, +, –, …], тоді відповіддю повинен служити сам початковий список. В іншому випадку залишити у списку тільки від'ємні члени списку, зберігаючи їх порядок.

3. Ввести з клавіатури список цілих чисел і № елементу m. Поміняти місцями у списку найбільший член та член з номером m.

4. Ввести з клавіатури список дійсних чисел. Якщо у списку перше число парне, то побудувати список з усіх від'ємних членів списку. Інакше побудувати список з усіх додатних членів списку. Порядок слідування чисел в обох випадках змінити на зворотний.

5. Ввести з клавіатури список цілих чисел. Поміняти у списку місцями найбільший та найменший члени.

6. Ввести з клавіатури список дійсних чисел. Поміняти у списку місцями найбільший та останній члени.

7. Ввести з клавіатури список цілих чисел. Перетворити числовий список за правилом: більше з аі та аі+2 взяти за значення аі, а менше з аі та аі+2 за значення аі+2.

8. Ввести з клавіатури список цілих чисел. Перетворити список за правилом: найменший член списку замінити цілою частиною з середнього арифметичного усіх членів, інші члени залишити без зміни. Якщо у списку декілька членів з мінімальним значенням, то замінити останній за порядком.

9. Ввести з клавіатури список дійсних чисел. Отримати новий список замінюючи аі нулями, якщо аі є член з максимальним значенням, та замінюючи аі одиницею у іншому випадку.

10. Ввести з клавіатури список цілих чисел. Отримати новий список за правилом: помножити усі члени списку аі на квадрат найменшого елемента списку, якщо а1 0, та на квадрат найбільшого елемента списку, якщо а1<0.

11. Ввести з клавіатури список цифр. Визначити скільки різних цифр зустрічається у списку. Наприклад. У списку [3, 1, 2, 5, 1, 2] зустрічається 4 різних цифри.

12. Ввести з клавіатури список дійсних чисел. Переставити усі члени списку так, щоб спочатку йшли усі додатні члени, 0, а потім від'ємні. Порядок у групах повинен зберігатися.

13. Ввести з клавіатури список дійсних чисел. 3алишити без зміни список, якщо він впорядковано за зростанням чи за зменшенням, інакше вилучити зі списку ті члени, порядкові номери яких кратні 4, зберігаючи порядок залишених членів.

У завданнях 14-18 оброблюються множини. Для множини не важливий порядок елементів і множина не має однакових елементів. Працюючи з множинами подавайте їх у вигляді списків, які повинні мати властивості множин.

14. Ввести з клавіатури дві множини X і Y у формі списків цілих чисел. Побудувати перетин двох множин Z = X&Y.

15. Ввести з клавіатури дві множини X і Y у формі списків цілих чисел Побудувати об'єднання двох множин Z = ХVY.

16. Ввести з клавіатури дві множини X і Y у формі списків цілих чисел. Перевірте, що усі члени множини X, входять у множину Y ?

17. Ввести з клавіатури дві множини X і Y у формі списків цілих чисел. Перевірте тотожність двох множин X і Y.

18. Ввести з клавіатури список цілих чисел. Отримати множину з елементів числового списку.

19. Ввести з клавіатури список цілих чисел. Отримати усі числа, які входять у список по одному разу.

20. Ввести з клавіатури список цілих чисел. Знайти суму чисел, які входять в список по одному разу.

21. Ввести з клавіатури список цілих чисел. Знайти скільки чисел входять у числовий список більше ніж один раз.

22. Ввести з клавіатури список цілих чисел. Вилучити зі списку усі числа, які зустрічаються більше двох разів.

23. Ввести з клавіатури список цілих чисел. 3амінити усі числа, що повторюються у списку, на 0.

24. Нехай по каналу зв’язку передають повідомлення, що має вигляд списку з 0 і 1. Через перешкоди можливо помилковий прийом деяких сигналів: 0 може бути сприйнятий як 1 і навпаки. Тому кожну цифру сигналу передають тричі. Наприклад сигнал [1 0 1] передають [1 1 1 0 0 0 1 1 1]. Під час розшифровки у кожній трійці чисел 3 або 2 однакові цифри замінюють на цю цифру. Написати програму розшифровки.

25. Ввести з клавіатури список цілих чисел. Відсортувати числа списку за збільшенням методом обліку.

3.4 Зміст звіту

Звіт повинен мати наступні пункти:

3.4.1 Тему, мету роботи

3.4.2 Завдання

3.4.3 Текст програми

3.4.4 Вхідний дані і результат роботи програми

При захисті лабораторних робіт враховується:

- якість програми;

- знання роботи програми;

- знання матеріалу лекцій за темою.

 

 

3.5 Контрольні запитання

3.5.1 Яка основна операція на списках? В яких режимах може працювати основна операція на списках?



php"; ?>