I. Основи мови Visual Prolog
1. Введення в логічне програмування
У Пролозі ми отримуємо рішення задачі логічним висновком з раніше відомих положень. Зазвичай програма на Пролозі не є послідовністю дій, - вона являє собою набір фактів з правилами, які забезпечують отримання висновків на основі цих фактів. Тому Пролог відомий як декларативний мову.
Пролог включає механізм виведення, який заснований на зіставленні зразків. За допомогою підбору відповідей на запити він витягує зберігається (відому) інформацію. Пролог намагається перевірити істинність гіпотези (іншими словами, відповісти на питання), запитуючи для цього інформацію, про яку вже відомо, що вона істинна. Прологовское знання про світ - це обмежений набір фактів (і правил), заданих в програмі.
Однією з найважливіших особливостей Прологу є те, що, на додаток до логічного пошуку відповідей на поставлені вами питання, він може мати справу з альтернативами і знаходити всі можливі рішення. Замість звичайної роботи від початку програми до її кінця, Пролог може повертатися назад і переглядати більше одного "шляху" при вирішенні всіх складових завдання частин.
Логіка предикатів була розроблена для найбільш простого перетворення принципів логічного мислення в записувану форму. Пролог використовує переваги синтаксису логіки для розробки програмного мови. У логіці предикатів ви, перш за все, виключаєте зі своїх пропозицій все несуттєві слова. Потім ви перетворюєте ці пропозиції, ставлячи в них на перше місце відношення, а після нього - згруповані об'єкти. Надалі об'єкти стають аргументами, між якими встановлюється це відношення. В якості прикладу в табл. представлені пропозиції, перетворені у відповідності з синтаксисом логіки предикатів.
Таблиця 1. Синтаксис логіки предикатів
Пропозиції на природній мові
Синтаксис логіки предикатів
Машина гарна
fun (car)
Роза червона
red (rose)
Білл любить машину, якщо машина красива
likes (bill, Car) if fun (Car)
2. Факти
На Пролозі описуються об'єкти ( objects ) і відносини ( relations ), а потім описує правила ( rules ), при яких ці відносини є істинними. Наприклад, пропозиція
Білл любить собак. (Bill likes dogs.)
встановлює відношення між об'єктами Bill і dogs (Білл і собаки); цим відношенням є likes (любить). Нижче представлено правило, що визначає, коли пропозиція "Білл любить собак "є істинним:
Білл любить собак, якщо собаки хороші. (Bill likes dogs if the dogs are nice.)
У Пролозі відношення між об'єктами називається фактом (fact). У природній мові відношення встановлюється в реченні. У логіці предикатів, використовуваної Прологом, ставлення відповідає простої фрази (фактом), що складається з імені відносини і об'єкта або об'єктів, укладених в круглі дужки. Як і пропозицію, факт завершується крапкою (.) .
Нижче представлено декілька пропозицій на природній мові з відношенням "Любить" (likes):
Білл любить Сінді. (Bill likes Cindy)
Сінді любить Білла. (Cindy likes Bill)
Білл любить собак. (Bill likes dogs)
А тепер перепишемо ці ж факти, використовуючи синтаксис Прологу:
likes (bill, cindy).
likes (cindy, bill).
likes (bill, dogs).
Факти, крім відносин, можуть виражати і властивості. Так, наприклад, пропозиції природного мови "Kermit is green" (Керміт зелений) і "Caitlin is girl" (Кейтлін - дівчинка) на Пролозі, висловлюючи ті ж властивості, виглядають наступним чином:
green (kermit).
girl (caitlin).
3. Предикати
Ставлення до Пролозі називається предикатом. Аргументи - це об'єкти, які зв'язуються цим відношенням; у факті
likes (bill, cindy).
відношення likes - це предикат, а об'єкти bill і cindy - аргументи.
Приклади предикатів з різним числом аргументів:
pred (integer, symbol)
person (last, first, gender)
run ()
birthday (firstName, lastName, date)
У прикладі показано, що предикати можуть зовсім не мати аргументів.
4. Правила
Правила дозволяють вам вивести один факт з інших фактів. Іншими словами, можна сказати, що правило - цей висновок, для якого відомо, що воно істинно, якщо одна або декілька інших знайдених висновків або фактів є істинними. Нижче представлені правила, відповідні зв'язки "любити" (Likes):
Сінді любить все, що любить Білл. (Cindy likes everything that Bill likes)
Кейтлін любить все зелене. (Caitlin likes everything that is green)
Використовуючи ці правила, ви можете з попередніх фактів знайти деякі речі, які люблять Сінді і Кейтлін:
Сінді любить Сінді. (Cindy likes Cindy)
Кейтлін любить Керміт. (Caitlin likes Kermit)
Щоб перевести ці правила на Пролог, вам потрібно трохи змінити синтаксис:
likes (cindy, Something): - likes (bill, Something). ilikes (caitlin, Something): - green (Something).
Символ: - має сенс "якщо", і служить для розділення двох частин правила: заголовка і тіла. Можна розглядати правило і як процедуру. Іншими словами, правила
likes (cindy, Something): - likes (bill, Something).
likes (caitlin, Something): - green (Something).
означають: "Щоб довести, що Сінді любить щось, доведіть, що Білл любить це "і " Щоб довести, що Кейтлін любить щось, доведіть, що це щось зелене" . З такою "процедурної" точки зору правила можуть "Попросити" Пролог виконати інші дії, відмінні від доказів фактів, наприклад, надрукувати що-небудь.
5. Запити (Цілі)
Описавши в Пролозі кілька фактів, можна задавати питання, що стосуються відносин між ними. Це називається запитом (query) системи мови Пролог. Можна задавати Прологу такі ж питання, які ми могли б поставити вам про ці відносини. Грунтуючись на відомих, заданих раніше факти і правилах, ви можете відповісти на питання про ці відносини, в точності так само це може зробити Пролог. На природній мові ми запитуємо: Does Bill like Cindy ? (Білл любить Сінді?) За правилами Прологу ми запитуємо:
likes (bill, cindy).
Отримавши такий запит, Пролог відповість:
yes (та)
тому що Пролог має факт, який підтверджує, що це так. Трохи ускладнивши питання, можна запитати на природній мові: What does Bill like ? (Що любить Білл?) За правилами Прологу ми запитуємо:
likes (bill, What).
Необхідно відзначити, що другий об'єкт - What-починається з великої літери, тоді як перший об'єкт - bill - немає. Це відбувається тому, що bill - фіксований, постійний об'єкт - відома величина, a What - змінна.
Змінні завжди починаються з великої букви або символу підкреслення!
Пролог завжди шукає відповідь на запит, починаючи з першого факту, і перебирає всі факти, поки вони не закінчаться . Отримавши запит про те, що Білл любить, Пролог відповість:
What = cindy
What = dogs
2 Solutions
Так, як йому відомо, що
likes (bill, cindy).
і
likes (bill, dogs).
Якби ми запитали:
What does Cindy like? (Що любить Сінді?)
likes (cindy, What).
то Пролог відповів би:
What = bill
What = cindy
Wha...