Скачать презентацию ЛК 11 Управління ходом виконання і організація Скачать презентацию ЛК 11 Управління ходом виконання і організація

LK-11.pptx

  • Количество слайдов: 26

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

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

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

Механізм логічного виведення. По перше, через те, що факти завжди є істинними, мета успішно Механізм логічного виведення. По перше, через те, що факти завжди є істинними, мета успішно задовольняється, якщо вона співставляється з існуючим фактом. По друге, мета вважається істинною, якщо збігається з деяким заголовком “А”, всі підцілі якого “B 1, B 2, . . Bn” можуть бути успішно завершені. Якщо спроба співставлення підцілей і фактів завершується невдало, а залишаються альтернативні та ще не використані правила й факти, тоді Пролог-система буде здійснювати повернення і використовувати ці альтернативи. Якщо всі альтернативи перебрані й завершились невдало, то кажуть, що початкова мета незадовільна. Порядок оцінки цілей у самому реченні - зліва направо.

2. Засоби керування ходом виконання. Уніфікація - це процес обробки на збіг двох предикатів 2. Засоби керування ходом виконання. Уніфікація - це процес обробки на збіг двох предикатів і призначення вільних змінних Вона включає такі дії: 1. Пролог намагається задовольнити мету, починаючи з початку програми шукати відповідність. 2. Коли робиться новий виклик, пошук також починається з початку програми. 3. Коли виклик успішно знаходить відповідність (кажуть, виклик повертається), викликається наступна підціль. 4. Якщо змінні зв’язані в підпункті, то єдиний шлях звільнити їх бектрекінг.

Засоби керування ходом виконання. Основні пункти бектрекінгу: 1. Підцілі повинні бути задоволені в послідовності Засоби керування ходом виконання. Основні пункти бектрекінгу: 1. Підцілі повинні бути задоволені в послідовності зверху вниз. 2. Пункти предиката тестуються в тому порядку, в якому з’являються в програмі при перегляді зверху вниз. 3. Мету буде задоволено, якщо буде знайдено відповідність для кожного рівня відповідного дерева. 4. Виклик, що породжує множину розв’язків, є недетермінованим.

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

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

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

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

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

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

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

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

Рекурсії та ітерації програмування. в Друге правило складніше, оскільки побудова ланцюжка відносин батько може Рекурсії та ітерації програмування. в Друге правило складніше, оскільки побудова ланцюжка відносин батько може викликати певні труднощі. Відповідно до них відношення предок визначалося б таким безліччю пропозицій: мові логічного предок (X, Z): батько (X, Y 1), предок (X, Z): батько (X, Z). батько (Y 1, Y 2), батько (Y 2, Z). предок (X, Z): - предок (X, Z): батько (X, Y), батько (Y, Z). батько (X, Y 1), батько (Y 1, Y 2), батько (Y 2, Y 3), батько (Y 3, Z).

4. Відсікання у мові логічного програмування. Visual Prolog передбачає можливість відсікання, яка використовується для 4. Відсікання у мові логічного програмування. Visual Prolog передбачає можливість відсікання, яка використовується для переривання пошуку з поверненням; відсікання позначається знаком оклику (!). Діє відсікання просто: через нього неможливо зробити відкат (пошук з поверненням). Відсікання поміщається в програму таким же чином, як і підцілі в тілі правила. Коли процес проходить через відсікання, негайно задовольняється звернення до cut і виконується звернення до чергової підцілі (якщо така є). Одного разу пройшовши через відсікання, вже неможливо зробити відкат до підцілей, розташованим в оброблюваному реченні перед відсіканням, і також неможливо повернутися до інших пропозицій, що визначає обробний предикат (предикат, що містить відсікання).

Відсікання у мові логічного програмування. Існують два основні випадки застосування відсікання: q. Якщо ви Відсікання у мові логічного програмування. Існують два основні випадки застосування відсікання: q. Якщо ви заздалегідь знаєте, що певні посилки ніколи не приведуть до осмислених рішень (пошук рішень у цьому випадку буде зайвою витратою часу), - застосуйте відсікання, - програма стане швидше і економічніше. Такий прийом називають зеленим відсіканням; q. Якщо відсікання вимагає сама логіка програми для виключення з розгляду альтернативних підцілей. Це червоне відсікання.

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

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

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

6. Рішення проблеми із нескінченними циклами. Кращим рішенням цієї проблеми є відмовитися від використання 6. Рішення проблеми із нескінченними циклами. Кращим рішенням цієї проблеми є відмовитися від використання лівої рекурсії. У загальному випадку неможливо позбутися від всіх появ лівої рекурсії. Однак відповідний аналіз дозволяє визначити питання, рішення якого щодо рекурсивних програм призводить до результату.

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

Рішення проблеми із нескінченними циклами. Суттєвим є не порядок правил, а порядок цілей. Програма Рішення проблеми із нескінченними циклами. Суттєвим є не порядок правил, а порядок цілей. Програма буде завершеною, якщо перший аргумент мети – повний список. Мета, у якій перший аргумент – неповний список призводить до нескінченних обчислень. При побудові програм на Пролозі варто звернути увагу на важливу характеристику програми, що не має аналогів у логічному програмуванні, – відсутність надлишкових рішень. Значенням логічної програми є безліч виведених із програми основних цілей. Тут не важливо, чи виводиться мета єдиним чином, чи існує кілька різних висновків; це суттєво в Пролозі, оскільки від цього залежить ефективність пошуку рішень. Кожен можливий висновок означає додаткову область у дереві пошуку. Чим більше дерево пошуку, тим довше триває обчислення. У загальному випадку бажано зберегти розмір дерева пошуку по можливості мінімальним.

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

Рішення проблеми із нескінченними циклами. Одна із причин появи надлишкових рішень у програмах на Рішення проблеми із нескінченними циклами. Одна із причин появи надлишкових рішень у програмах на Пролозі полягає в наявності різних правил, придатних для того самого випадку. Долаючи причину, що призводить до надлишкових рішень, складають в розгляді занадто великого числа спеціальних випадків. Іноді подібний розгляд мотивується прагненням до ефективності. Для виключення надлишкових рішень можна додати додатковий факт, що дозволить скоротити рекурсивні обчислення, коли існує аргумент – порожній список. Кожна пропозиція повинна застосовуватися лише до списків з ненульовим другим аргументом.

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