Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОДЕЛІ ПОДАННЯ ЗНАНЬ.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
248.2 Кб
Скачать

7.7. Мова Пролог і логічне програмування

Розглянемо відповідність між численням предикатів і Проло­гом [26]. Як ми вже бачили, деякі фрази виглядають точно так, як фрази Прологу, а інші дещо інакше. Зокрема, запитання Прологу:

1-А 1,Л2, ..., ..., ..., An означає точно те саме, що й неповна хорнівська фраза:

:-А\,А2, ..., ..., ..., An.

Система виведення Прологу базується на засобах аналізу хорнівських фраз. Конкретна стратегія, яку використовує ця мова, є формою аналізу постійного входу. Коли застосовується дана стратегія, вибір, що з чим ана­лізувати, проводиться за таким принципом.

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

Наприклад, від:

:- мати (Іван, X), мати (X, У).

та

мати (U, У):-батько (U, V), жінка (V). переходимо до

:- батько (Іван, X), жінка (X), мати (X, У).

Насправді стратегія доведення у Пролозі ще більш обмежена, ніж прос­то аналіз лінійного входу. В цьому прикладі ми вирішили звести перший літерал у цільовому пункті, але могли вибрати й інший.

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

І, нарешті, кілька слів про те, в яких випадках у Пролозі відповідність двох фраз може відрізнятись від класичного аналізу. Більшість варіантів Прологу дозволить вам досягнути такої мети: рівність (X, X). ? —рівність (f(Y), У), тобто дасть змогу умові відповідати складовій частині самої себе, тобто ма­тиме місце рекурсивний виклик. У цьому прикладі /(У) зрівнюється з У, ЩО СТОЇТЬ всередині/(f (У)), яке перетворюється H2if(f(f (У))) і т. д. Пролог дозволить вам надрукувати і запустити таку програму, але навряд чи ви отримаєте відповідь. Згідно з правилами уніфікації такі випадки не повин­ні траплятись. Ось чим відрізняється поведінка Прологу. В деяких версіях з'явиться попередження, що такого робити не можна, але оскільки такі ви­падки трапляються рідко, то більшість розробників програми випускали цю можливість.

Програмування на Пролозі має декларативну основу: ми повідомля­ємо про істинні твердження (аксіоми) і просимо перевірити істинність інших тверджень (теорем). Ідея того, що програмування має бути саме таким, виникла давно і привела до розробки практичної можливості логічного програмування — створення мов логічного програмування. Переваги логічного програмування полягають у тому, що програми лег­ше прочитати, і вони не міститимуть описів того, як потрібно виконува­ти дії, скоріше там буде описано, як виглядатиме рішення. Тим більше, якщо програма схожа на інструкцію по досягненню мети, то в ній легше виявити дефекти. Ми будемо бачити, що робить програма, а не як вона це робить.