Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / POSIBNIK / СТРУКТУРИ ТА ОРГАНИЗАЦИЯ ДАНИХ В ЕОМ.doc
Скачиваний:
37
Добавлен:
23.03.2015
Размер:
1.1 Mб
Скачать

3. Три семантичні моделі пролог-програми

Термін “семантика” (зміст) формули символічної логіки відноситься до визначення істинісного значення цієї формули. Під семантикою деякої конструкції мови програмування розуміється поведінка комп'ютера при виконанні цієї конструкції. Оскільки ПРОЛОГ одночасно є і мовою логіки і мовою програмування, то до нього застосовні всі ці трактування терміна семантика.

Для пояснення змісту ПРОЛОГ-програми застосовуються три семантичні моделі:

  1. декларативна модель;

  2. процедурна модель;

  3. модель у вигляді абстрактної машини (АМ).

Існування трьох семантичних моделей додає ПРОЛОГу велику виразність.

Декларативна модель – специфікує істинісні значення конкретних випадків відношень. Слово “декларативний” вживається тому, що у фразах мови ПРОЛОГ декларується (тобто оголошується), що будуть виконані деякі відношення між аргументами, якщо виконані всі умови, що входять у ці фрази.

У декларативній моделі фрази ПРОЛОГу являють собою формули логіки предикатів 1-го порядку, що записані у формі фраз Хорна, тобто як логічні зв’язки можуть виступати лише “якщо”, “і” й “або”. Послідовність умов не має значення, тому що всі умови повинні виконуватись одночасно. Множина фраз, що складає ПРОЛОГ-програму, описує істотні особливості логічних структур прикладної області.

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

Модель у вигляді АМ. При виконанні запиту інтерпретатор застосовує стосовно множини фраз ПРОЛОГу деяку стратегію розв’язання задачі. З погляду обчислень ця стратегія може бути описана за допомогою деякої АМ. У мові ПРОЛОГ запит і множина фраз мають обчислювальний сенс. Це виявляється в тому, що вони викликають визначене поводження інтерпретатора ПРОЛОГу. Модель у вигляді АМ описує зміст запиту й множини фраз через дії цієї машини. Дії такої АМ можна розглядати як застосування правила резолюції. Можна також пояснити дії цієї машини через операції зі стеком активних запитів.

Варто розрізняти два рівні змісту програми на ПРОЛОЗі. А саме:

1) Декларативний – визначає, ЩО повинно бути результатом роботи програми (не вдаючись у подробиці того ЯК система шукає ці результати).

2) Процедурний – визначає, ЯК відношення реально обробляються ПРОЛОГ-системою.

Здатність ПРОЛОГ-системи самостійно проробляти багато процедурних деталей вважається однією зі специфічних переваг ПРОЛОГу.

Приклад. Нехай у ПРОЛОГ-програмі наявна фраза:

керівник (Прізвище, Оклад):-

службовець(Прізвище, Оклад),

Оклад > 600.

Декларативний зміст:

деяка особа (Прізвище) – керівник, якщо

він чи вона є службовець з окладом, що перевищує 600.

Процедурний зміст:

один з способів знайти керівника – це:

по-перше, відшукати службовця і;

по-друге – перевірити, чи перевищує оклад цього службовця суму 600.

Модель у вигляді АМ потребує розуміння поведінки програми у взаємодії інтерпретатора ПРОЛОГа з базою даних (програмою):

після того, як знайдено службовця з окладом Оклад, і перевірка умови

Оклад > 600 не призвела до успіху, інтерпретатор повернеться до

останньго показника відкоту і буде шукати іншого службовця.

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

Це робить програмування на ПРОЛОЗі більш легким, ніж на таких типових процедурно-орієнтованих мовах, як ПАСКАЛЬ. На жаль, декларативного підходу не завжди достатньо. Їх часто не можна ігнорувати з міркувань ефективності.

Можна запропонувати таку схему розробки програми на ПРОЛОЗі:

А. Спочатку варто установити, які факти і відношення властиві даній задачі. Вони можуть бути безпосередньо виражені твердженнями ПРОЛОГу й утворюють декларативний опис задачі. Такий опис не задає порядок використання тверджень й узгодження цілей у межах твердження, не показує, як сформульовані твердження можуть бути використані для розв’язання задачі.

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

В. Однак часто одного упорядкування мало. Можливо прийдеться додати деякі деталі для керування ходом виконання програми: предикати repeat, fail і відсікання. Така інформація вказує системі ПРОЛОГ ЯК застосовувати факти і відношення. Отриману в результаті програму варто розглядати вже процедурно.

При написанні й розгляді процедури необхідно визначити такі характеристики:

1. Скільки разів може бути успішно погоджене цільове твердження?

Коли цільове твердження викликає процедуру, важливо знати, що станеться, якщо механізм відкоту знову приведе до цього цільового твердження:

- чи буде воно погоджене знову;

- чи повинно бути воно погоджене.

2. Яка конкретизація змінних відбувається при використанні кожного твердження?

Зміст виклику процедури, незалежно від побічних ефектів, полягає в тому, щоб:

- зробити яку-небудь перевірку або

- здійснити конкретизацію чи зчеплення змінних.

3. Які виникають побічні ефекти?

Звичайно це зміни, пов'язані з уведенням у базу даних і видаленням з неї, або обробка термів. Для інтерактивних програм це може бути введення з клавіатури або вивід на екран.

4. Які параметри застосовуються для вхідних значень і які для вихідних?

Деякі процедури можуть мати параметри, що служать в окремих випадках для введення, а в інших – для виведення.