Людина(аристотель)
Факти.
Ми хочемо повідомити Прологу факт: "Василю подобається Марія". Цей факт включає два об'єкти, позначених іменами "Марія" і "Василь", і відношення, позначене словом "подобається". У мові Пролог використовується стандартна форма запису фактів:
подобається (василь, марія).
Важливо дотримуватися наступних правил:
• Імена усіх стосунків і об'єктів повинні розпочинатися з рядкової букви.
• Спочатку записується ім'я відношення. Потім через кому записуються імена об'єктів, а увесь список імен об'єктів поміщається в круглі дужки.
• Кожен факт повинен закінчуватися крапкою.
Визначаючи за допомогою фактів відношення між об'єктами, необхідно враховувати, в якому порядку перераховуються імена об'єктів всередині круглих дужок. Цей порядок може бути довільним, але, вибравши один раз якийсь певний порядок, ми повинні скрізь наслідувати його і далі.
Імена об'єктів, список яких в кожному факті поміщений в круглі дужки, називаються аргументами.
Ім'я відношення, яке записується безпосередньо перед круглими дужками, називається предикатом.
Імена об'єктів і стосунків є повністю довільними. Наприклад, замість виразу подобаться(василь, марія) ми могли б з таким же успіхом представити це як a(b,c), пам'ятаючи при цьому, що а значить подобається, b означає Василь, а с - Марія.
Стосунки можуть мати довільне число аргументів. грати(василь, марія, футбол).
Сукупність фактів в Пролозі називається базою даних. Ми користуватимемося терміном база даних кожен раз при об'єднанні разом деяких фактів (а згодом і правил) для спільного їх використання при вирішенні деякої конкретної задачі.
Запитання .
Маючи деяку сукупність фактів, ми можемо звертатися до Прологу з питаннями про них. У Пролозі питання записується майже так само, як і факт, за винятком того, що перед ним ставиться спеціальний символ. Спеціальний символ складається зі знаку питання і тире, що йде за ним. Розглянемо питання:
?- має(марія, книга).
Звернення до Прологу з питанням ініціює процедуру пошуку у базі даних, раніше введеній в систему. Пролог шукає факти, порівнянні з фактом питання. Два факти є рівними (чи відповідають один іншому), якщо їх предикати однакові (побуквенний збіг) і їх відповідні аргументи попарно співпадають. Якщо Пролог знаходить факт, що співпадає з питанням, то він відповідає так. Якщо у базі даних такого факту не існує, то Пролог відповідає немає. Відповідь, що видається Прологом, виводиться на дисплей терміналу безпосередньо під запитом.
У Пролозі відповідь false використовується в сенсі ніщо у базі даних не узгоджується з питанням.
людина(аристотель).
афінянин(сократ).
?- афінянин(сократ).
True
?- афінянин(аристотель).
False
3. Змінні .
Розумніше звернутися до Пролог-системи з проханням назвати що-небудь, що подобається Василю. Таке питання можна сформулювати таким чином" Чи подобається Василю X?". Ставлячи питання, ми не знаємо, для позначення якого об'єкту використана літера X. Нам хотілося б, щоб Пролог перерахував усі наявні можливості для позначення якого об'єкту використана літера X. У Пролозі можна не лише привласнювати імена конкретним об'єктам, але і використати імена, подібні X, для позначення об'єктів, які мають бути визначені Пролог-системою. Імена такого типу називаються змінними. Змінна в Пролозі може мати або не мати конкретного значення. Змінна конкретизована, якщо є об'єкт, який означає ця змінна. Змінна не конкретизована, якщо ще не відомо, що саме вона означає. У Пролозі використовується угода, що дозволяє відрізняти змінні від імен конкретних об'єктів, - кожне ім'я, що розпочинається з прописної літери, розглядається як змінна.
ім'я, що розпочинається з прописної літери, розглядається як змінна.
При пошуку відповіді на питання Пролог організовує перегляд усіх фактів у базі даних, щоб виявити об'єкт, який ця змінна могла б означати.
Розглянемо наступну базу даних і запит до Прологу:
подобається(василь,квіти).
подобається(василь,марія).
подобається(павло,марія).
?- подобається(василь, Х).
У питанні питається: Чи існує що-небудь, що подобається Василю? У відповідь Пролог надру-кує:
Х= квіти
а потім чекатиме подальших наказів; Припустимо, що у відповідь на першу знайдену Прологом відповідність (Х = квіти) ми пропонуємо системі продовжити пошук (ввівши “;”). Це означає, що ми хочемо погоджувати питання інакше; ми хочемо знайти інший об'єкт, який могла б означати змінна X. Це також означає, що Пролог повинен "забути" про те, що змінна X означає квіти, і знову продовжити пошук з неконкретизованою змінною X. Оскільки ми шукаємо альтернативне рішення, то по-шук триває з місця, відміченого маркером. Наступний знайдений системою факт, що відповідає питанню, є подобається(василь, марія). Змінна X знову стає конкретизованою, означаючи марія, а Пролог відмічає маркером факт подобається(василь, марія). Пролог надрукує Х = марія і чекатиме подальших команд. Якщо ми знову введемо крапку з комою, то Пролог продовжить пошук. У нашому прикладі немає більше нічого, що подобається Василю. Тому Пролог завершить пошук і надасть нам можливість зробити нові запити або ввести нові факти.
4. Кон'юнкції .
Припустимо, що ми хочемо отримувати відповіді на питання про складніші стосунки, такі як: "Чи подобаються Василь і Марія один одному?". Один із способів зробити це – дізнатися спочатку, чи подобається Василю Марія, і якщо Пролог відповість так, то запитати, чи подобається Марії Василь. Таким чином, це завдання складається з двох "цільових тверджень" (чи цілей), які Пролог повинен погоджувати. Зважаючи на те що подібна комбінація часто використовується при програмуванні на Пролозі, для неї є спеціальне позначення. Припустимо, ми маємо наступну базу даних:
подобається(марія, їжа).
подобається(марія, вино).
подобається(василь, вино).
подобається(василь, марія).
Ми хочемо дізнатися, чи подобаються Василь і Марія один одному. Для цього ми запитуємо: "Чи подобається Василю Марія і чи подобається Марії Василь?". Зв'язка і виражає той факт, що нас цікавить кон'юнкція двох вказаних цілей – ми хочемо послідовно погоджувати з базою даних обидві мети. Ми виражаємо це в питанні, записуючи обидві мети через кому:
?- подобається(василь,марія), подобається(марія,василь).
Кома читається як “і” і використовується для розділення довільного числа різних цілей, які мають бути погоджені з базою даних для того, щоб відповісти позитивно на питання. Якщо задана послідовність цілей (розділених комами), то Пролог намагається погоджувати кожну мету по черзі, переглядаючи базу даних у пошуках порівнянних фактів.