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

ЛК.11 – Управління ходом виконання і організація циклів в мові логічного програмування

Анотація

Механізм логічного виведення. Засоби керування ходом виконання. Рекурсії та ітерації в мові логічного програмування. Відсікання у мові логічного програмування. Проблеми появи нескінченних циклів. Рішення проблеми із нескінченними циклами.

11.1 Механізм логічного виведення Найчастіше програма на Пролозі є послідовністю процедур, кожна з яких реалізує конкретний предикат. Процедура будується з речень, що мають форму а: - b1, b2,.., Bn.

Наше речення інтерпретується як: «А є істинним, якщо B1, B2,.., Bn є істинними». Кажуть, що А є заголовком цього речення, а - його тіло. Якщо n=0, тоді таке речення визначає деякий факт і записується «А». Речення А і є прикладами цілей або ж викликами процедур, що складаються з предикату і його аргументів R(x,y).

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

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

По друге, мета вважається істинною, якщо збігається з деяким заголовком «А», всі підцілі якого «B1, B2,..Bn» можуть бути успішно завершені.

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

Порядок оцінки цілей у самому реченні - зліва направо.

11.2 Засоби керування ходом виконання.

Факти та правила Прологу отримують інформацію, якщо викликаються з аргументами, які є або константами, або ж зв’язаними змінними. Вони повертають інформацію до процедури виклику шляхом зв’язування змінних аргументів, що не були зв’язані.

Уніфікація - це процес обробки на збіг двох предикатів і призначення вільних змінних. Вона включає такі дії:

1. Пролог намагається задовольнити мету, починаючи з початку програми шукати відповідність.

2. Коли робиться новий виклик, пошук також починається з початку програми.

3. Коли виклик успішно знаходить відповідність (кажуть, виклик повертається), викликається наступна підціль.

4. Якщо змінні зв’язані в підпункті, то єдиний шлях звільнити їх - бектрекінг.

Можна виділити чотири основні пункти бектрекінгу:

1. Підцілі повинні бути задоволені в послідовності зверху вниз.

2. Пункти предиката тестуються в тому порядку, в якому з’являються в програмі при перегляді зверху вниз.

3. Мету буде задоволено, якщо буде знайдено відповідність для кожного рівня відповідного дерева.

4. Виклик, що породжує множину розв’язків, є недетермінованим.

11.3 Рекурсії та ітерації в мові логічного програмування

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

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

Ітерація зазвичай буває більш ефективною, ніж рекурсія, оскільки для завершення кроку ітерації - на відміну від кроку рекурсії - не потрібно чекати результатів виконання наступних кроків. Використання ітерації, отже, дозволяє уникнути витрат, пов'язаних з організацією в період виконання стека латентних викликів (викликів ще очікують активації), що неможливо при використанні рекурсії. Рекурсивна форма організації алгоритму зазвичай виглядає витонченіше ітераційної і дає більш компактний текст програми, але при виконанні, як правило, повільніше і може викликати переповнення стека латентних викликів.

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

Логічно рекурсивним алгоритмам властива структура індуктивного математичного докази. Наведена вище рекурсивна програма обчислення факторіала описує нескінченну безліч різних обчислень за допомогою всього лише двох пропозицій. Це дозволяє легко побачити правильність цих пропозицій. Крім того, правильність кожної пропозиції може бути вивчена незалежно від іншого.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]