Предмет:
Тип роботи:
Методичні вказівки
К-сть сторінок:
44
Мова:
Українська
запит вводиться після запрошення Прологу, що у більшості версій має вигляд ?-) , наприклад,
?- 'Сьогодні сонячно'. Yes
?- 'Васі 10 років'. Yes
?- 'Сьогодні сонячно', 'Васі 10 років'. Yes
Кома між фактами в останньому запиті означає операцію логічного І
(кон'юнкцію).
Така форма запису відповідає логіці висловлень, можливості якої, як уже говорилося, досить обмежені. Ми не можемо задати, наприклад, питання про те, скільки років Васі. Набагато зручніше використати параметризовані факти, роботу з якими підтримує логіка предикатів. На Пролозі факт може бути записаний у вигляді предиката, аргументи якого є символьними або числовими константами.
У загальному випадку предикат - це логічна функція від одного або декількох аргументів, тобто функція, що діє в множині з двох значень: істина та неправда. Предикат Прологу записується у вигляді складного терму:
ім'я_предикату(аргументи).
Аргументи перераховуються через кому та являють собою якісь об'єкти або властивості об'єктів, а ім'я предиката позначає зв'язок або відношення між аргументами. Предикат однозначно визначається парою: ім'я та кількість аргументів. Два предикати з однаковим ім'ям, але різною кількістю аргументів, вважаються різними. Кількість параметрів предиката називається його арністтю (arity). При описі предиката арність вказують після його імені, розділяючи їх символом '/' (слеш).
Як правило, імена предикатів й аргументів записуються в називному відмінку. Пробіли в них не допускаються, тому як роздільник в символьних константах використається символ підкреслення.
Приклад
Факт "Микола працює слюсарем" на Пролозі запишеться у такий спосіб:
професія(микола, слюсар).
Тут предикат професія має два аргументи: перший означає ім'я людини, а другий - професію. Факт "Борису 10 років" можна представити у вигляді:
вік("Борис", 10).
Порядок аргументів предиката зв'язаний зі змістом факту й тому не змінюємо. При записі фактів треба пам'ятати, що:
ім'я факту починається з малої літери;
запис кожного факту закінчується крапкою.
У наведених вище прикладах професія та вік - предикати (складні терми), микола та слюсар - атоми, 10 - число, "Борис" - рядок. Докладніше про види термів Прологу розповідається в наступному розділі.
База даних на Пролозі - це сукупність фактів. У процесі роботи в базу даних можна додавати нові факти, видаляти або змінювати старі.
Приклад
Сладемо базу даних з наступних фактів: "слон більше, ніж кінь",
"кінь більше, ніж віслюк", "віслюк більше, ніж собака", "віслюк більше, ніж мавпа":
більше(слон, кінь). більше(кінь, віслюк). більше(віслюк, собака). більше(віслюк, мавпа).
Ми використали предикат більше, що має два параметри.
Збережемо цю базу даних у текстовому файлі та потім познайомимо
Пролог з нею. Тепер можна формулювати запити до інтерпретатора Прологу:
?- більше(слон, кінь). Yes
?- більше(кінь, слон). No
1.4. Запити до бази даних
Запит - це послідовність предикатів, які розділені комами та завершені крапкою. Природною мовою кома відповідає союзу "і", а мовою математичної логіки позначає кон’юнкцію. За допомогою запитів можна "запитувати" базу даних про те, які твердження є істиними. Предикат запиту зветься метою.
Прості питання, що не містять ніяких змінних, називають та-ні- питаннями. Вони допускають лише дві можливі відповіді: "Yes" означає наявність відповідного факту в базі даних (перший запит приклада, наведеного нижче), "No" - його відсутність (другий запит). У випадку відповіді "Yes" говорять, що запит завершився успіхом, ціль досягнута.
Приклад
?- більше(слон, кінь), більше(кінь,віслюк). Yes
?- більше(слон, собака). No
Використання змінних у запитах дозволяє задавати більш складні питання. Припустимо, наприклад, що ми хочемо визначити, які тварини більше віслюка. У наступному запиті змінна X позначає шукану відповідь:
?- більше(X, віслюк). X = кінь
Yes
При обробці запиту змінна X прийняла значення "кінь". Переглядаючи базу даних, інтерпретатор виявив факт, що стверджує, що кінь більше віслюка, та запит був успішно виконаний.
Запити зі змінними можуть мати більше одного рішення. Першим завжди виводиться те з рішень, що знаходиться ближче до початку бази даних. Якщо нам досить тільки однієї відповіді, то можна нажати Enter і закінчити пошук. У випадку, якщо ми захочемо одержати чергову відповідь, потрібно нажати клавішу ; (крапка з комою), і Пролог почне пошук інших варіантів відповіді на запит. Повідомлення "No" говорить про відсутність чергового рішення.
Приклад
?- більше(віслюк, Х). X = собака;
X = мавпа; No
?- більше(X,Y). X = слон
Y = кінь;
X = кінь
Y = віслюк;
X = віслюк
Y = собака;
X = віслюк Y = мавпа; No
1.5. Уніфікація
Уніфікація є основним механізмом обробки запитів у логічному програмуванні. Після того як користувач надсилає запит інтерпретаторові, цей запит активізується. Інтерпретатор приступає до аналізу фраз бази даних у пошуках першої фрази, заголовок якої буде уніфікуватися із запитом. Для того, щоб запит уніфікувався із заголовком фрази, необхідний збіг у них імені предиката, кількості аргументів та уніфікації кожного з них.
Уніфікація термів, якими є аргументи, описується правилами, які приведені нижче. У прикладах використається предикат «=», що намагається уніфікувати свої аргументи.
1. Змінна