машина В«не розумієВ» використовуються в програмі імен: В«подобаєтьсяВ», В«носитьВ», В«сергейВ» і т.д. Ми могли б замість них використовувати будь-які інші позначення. Для інтерпретатора Прологу істотні тільки збіги і відмінності імен, а також зв'язки між предикатами, що встановлюються за допомогою кон'юнкцій і імплікацій. Осмислені імена ми будемо використовувати тільки для того, щоб полегшити читання і розуміння програм самим собі. Однак, в Пролозі існують зумовлені імена (вбудовані предикати), які дозволяють виконати арифметичні операції, порівняння, графічні побудови, введення-виведення та інші корисні операції як побічний продукт виконання програми. Вбудовані предикати Arity-Prolog описані в довідці за системою програмування, спричиненої натисканням клавіші F1. p align="justify"> Аналогічний набір вбудованих предикатів мається на інших версіях мови Пролог.
АЛГОРИТМ ВИКОНАННЯ ПРОГРАМ НА прологом
Факти і правила програми на Пролозі є описом відносин і зв'язків між об'єктами деякої предметної області, тобто записом умови якоїсь логічної задачі, яку належить вирішити. Описані відносини і зв'язки розглядаються статично. Такий підхід до програми називається декларативним. Порядок проходження фактів, правил і підцілей в правилах не впливає на декларативний зміст програми. p align="justify"> Разом з тим, програму можна розглядати з точки зору послідовності зіставлень, конкретизації змінних і резолютивних висновків, що відбуваються при її виконанні. Такий підхід називається процедурним. Процедурний сенс програми обов'язково повинен враховуватися при програмуванні на Пролозі. Так, факт можна розглядати як повністю певну процедуру, для виконання якої більше нічого не потрібно. Правило
А:-В1, В2, ..., Вn.
можна розглядати як визначення процедури А, яке стверджує, що для її виконання треба визначити Bl, B2, ... , Вn. Процедури Bl, B2, ... , Вn повинні виконуватися в певному порядку - зліва направо. Якщо виконання чергової процедури завершується успішно, то відбувається перехід до наступної процедури. Якщо ж з якої-небудь причини чергова процедура виконується неуспішно, то відбувається перехід до наступного варіанта опису цієї процедури, і порядок пошуку такого варіанта в Пролозі заданий - зверху вниз. Пошук відповідних для узгодження фактів і правил у базі знань відбувається послідовно зверху-вниз, і якщо відповідних фактів не знайдено - відповідь негативна. Ця стратегія узгодження називається В«зверху-внизВ» і В«замкнутий світВ». p align="justify"> Розглянемо процес виконання програми більш докладно на прикладі.
Програма 112
а: - b, с, d.
b: - е, f.
с. d. е. f.
? - А. p align="justify"> Виконання програми починається з застосування методу резолюцій до цільового і одному з пропозицій програми для отримання їх резольвенти. Підходящу пропозицію програми підбирається перебором зверху-вниз так, щоб зіставлення його заголовка з цільовим пропозицією було успішним. В результаті резолюції виходить нове цільове пропозицію і метод резолюції застосовується до нього і до іншої пропозиції програми. Процес продовжується до тих пір, поки не будуть узгоджені з фактами всі виниклі при резолюції підцілі, табл. 3.6. br/>
Таблиця 3.6
До процесу виконання програми на Пролозі
Номер кроку резолюцііЦелевое предложеніеІсходное ?-F, c, d.4?-F, c, d.f. ?-C.d.5?-C, d.c. ?-D.6? -d.d. Пуста
При виконанні логічного висновку, якщо необхідно, відбувається конкретизація змінних. Розглянемо приклад. p align="justify"> Програма 113
любить (юрий, музику).
любить (сергей, спорт).
любить (А, книги):-читач (А), цікавий (А).
любить (сергей, книги).
любить (сергей, кіно).
читач (юрій).
цікавий (юрій).
? - любить (X, музику), любить (X, книги).
Подвійний запит в цій програмі може бути представлений цільовим деревом:
В
Спочатку, переглядаючи програму зверху вниз. Пролог знаходить перше речення, відповідне першої підцілі запиту:
В
Мінлива Х конкретизується значенням В«юрійВ». Починається узгодження 2-й підцілі запиту з умовою Х = юрій. 1-е і 2-е пропозиції програми не відповідають підцілі. У 3-му реченні:
любить (А, книги):-читач (А), цікавий (А).
аргумент А заголовка є змінна, тому вона може відповідати X, тобто отримує значення А = Юрін; другі аргументи збігаються. Тепер тіло п...