
- •1.Пролог - мова логічного програмування.
- •1.1.Загальний огляд мови Пролог.
- •1.2.Переваги і недоліки мови Пролог.
- •1.3.Числення предикатів - математична основа мови.
- •1.4.Побудова теорії деякої області знань.
- •1.5.Від формальної логіки до логічного програмування.
- •1.6.Механізм логічного виведення і керування пошуком.
- •2.Основні концепції прологу.
- •2.1.Факти та правила.
- •2.2.Як змінні отримують свої значення.
- •2.3.Анонімні змінні.
- •2.4.Складні цілі: кон`юнкція та диз`юнкція.
- •2.5.Способи Співставлення.
- •3.Структура програми pdc прологу.
- •3.1.Основні розділи програми.
- •3.2 Стандартні домени.
- •3.3.Синтаксис правила.
- •3.4.Директиви комп`ютеру.
- •3.5.Бектрекінг.
- •3.5.1.Бектрекінг з внутрішньою ціллю.
- •4.Контроль пошуку рішень.
- •4.1.Використання предикату fail.
- •4.2.Відміна бектрекінгу.
- •1.Коли ви знаєте попередньо, що певні варіанти ніколи не дадуть поштовху в знаходженні розв'язку, тоді використання cut(зелений cut) відкидає перегляд альтернативних шляхів.
- •2.Коли логіка програми потребує використання cut для відкидання перегляду альтернативних підцілей, тоді його називають червоним відтинанням.
- •4.3.Предикат not - заперечення як неуспіх.
- •4.4.Труднощі у використанні відтинання і заперечення.
- •4.5.Засоби керування.
- •4.6.Узагальнення.
- •5.Прості та складні об'єкти.
- •5.1 Прості дані.
- •5.1.1. Константи як об'єкти даних.
- •5.2.Складні об'єкти даних і функтори.
- •5.2.1.Уніфікація складних об`єктів.
- •5.2.2.Приклад застосування функторів.
- •5.3.Приклад використання складних об'зктів.
- •5.4.Опис доменів складних об'єктів.
- •5.5.Багаторівневі складні об'єкти.
- •5.6.Приклад, який ілюструє задання структури речення англійської мови.
- •5.7.Опис змішаних складних об'єктів.
- •5.7.1.Аргументи, які можуть мати різний тип.
- •5.7.2 Cписковий тип.
- •5.8.Порівняння складних об`єктів.
- •5.9.Узагальнення.
- •6. Ітерація і рекурсія.
- •6.1.Реалізація ітераційного процесу за допомогою бектрекінгу.
- •6.2.Дії типу до і після.
- •6.3.Застосування бектрекінгу для реалізації циклів.
- •6.4.Рекурсивні процедури.
- •6.5.Використання аргументів в якості параметрів циклу.
- •7. Рекурсивні структури даних.
- •7.1.Структура даних типу дерева.
- •7.2.Обходи дерева.
- •7.3.Створення дерева.
- •7.4.Бінарний пошук на дереві.
- •7.5. Сортування по дереву.
- •7.5. Програмна реалізація лексикографічного впорядкування при символьному вхідному потоці.
- •8. Робота з списками в пролозі.
- •8.1.Рекурсивна сутність списку.
- •8.2.Обробка списків.
- •8.2.1.Друк списків.
- •8.2.2.Підрахунок кількості елементів.
- •8.2.3.Іще один варіант підрахунку довжини списку.
- •8.2.4.Модифікація списку.
- •8.2.5.Належність елемента списку.
- •8.3.Використання одного й того ж предикату для вирішення різних задач.
- •8.4. Знаходження зразу всіх розв`язків.
- •8.5.Складні списки.
- •8.6.Реалізація синтаксичного аналізу за допомогою списків.
- •9. Техніка програмування в пролозі.
- •9.1.Принципи побудови експертної системи.
- •9.2. Макетування: задача маршрутизації.
- •9.3.Пригоди в дивних печерах.
- •9.4. Моделювання апаратних засобів.
- •9.5.Задача про ханойські башні.
- •9.6.Ділення слів на склади.
- •9.7. Задача про n королев.
- •10.Особливі технічні прийоми для професіоналів.
- •10.1.Потоковий аналіз.
- •10.2.Керування потоковим аналізом.
- •10.3. Стиль програмування.
1.6.Механізм логічного виведення і керування пошуком.
Найчастіше , програма на Пролозі є послідовністю процедур, кожна з яких реалізує конкретний предикат. Процедура будується із речень, які мають форму:
А: -В1, В2,..., Вn.
Наше речення інтерпретується наступним чином: “А є істинним, якщо В1,В2,...,Вn є істинними”.
Кажуть, що А є заголовком цього речення, а В1,В2,...,Вn його тіло. Якщо n=0, тоді таке речення визначає деякий факт і записується “А”.
Речення А і Ві є прикладами цілей або ж викликами процедур, які складаються із предикату і його аргументів R(x,y).
Якщо отримано запит (іншими словами ціль, яку необхідно задовільнити), Пролог пробує визначити його істинність двома способами. По перше, тому що факти завжди є істинними, тоді ціль успішно задовільняється, якщо вона співставляється з існуючим фактом. По друге, ціль вважається істинною, якщо вона співпадає з деяким заголовком “А” всі підцілі якого “В1,В2,...,Вn” можуть бути успішно завершені. Якщо спроба співставлення підцілей і фактів закінчується невдало, а залишаються альтернативні і ще не використані правила та факти, тоді Пролог-система буде здійснювати повернення і використовувати ці альтернативи. Якщо всі альтернативи перебрані і закінчились невдало, тоді кажуть що початкова ціль незадовільна.
Порядок оцінки цілей в самому реченні - зліва направо.
Вправи.
1.1.Базуючись на принципі силлогізму, довести:
а)Якщо задані дві посилки:
Всі українці люблять пісні.
Всі кияни - українці.
Тоді буде коректним висловлення:
Всі кияни люблять пісні.
б)Якщо задані дві посилки:
Всі програмісти люблять жувальну гумку.
Деякі програмісти живуть в Києві.
Тоді буде коректним висловлення:
Деякі люди з Києва люблять жувальну гумку.
1.2.За область знань візьмемо арифметику, а областю інтерпретації будуть натуральні числа. Область інтерпретації в цьому випадку нескінченна. Побудуйте теорію цієї області, розробивши задання довільного числа в вигляді терму.
1.3.Маємо наступну множину фраз
Р(а) Q(a,b)
Q(x,y) R(x,y)
S(b)
R(a,b)
Потрібно вияснити, чи є фраза Р(а), наслідком існуючої множини фраз.
2.Основні концепції прологу.
2.1.Факти та правила.
При побудові речень Прологу використовується той же підхід що й в предикатних логіках. Спочатку відкидаємо всі несуттєві слова. Потім трасформуємо речення, виставляючи на перше місце відношення.
Наприклад, наступні речення трансформуються в синтаксис предикатної логіки:
Китайська авторучка зручна.
зручна(китайська_авторучка).
Вані подобається авторучка, якщо вона зручна.
подобатись(ваня,авторучка) if зручна(китайська_авторучка).
Програміст визначає об'єкти і відношення. Потім формулює правила про те, коли ці відношення справджуються. Наприклад, речення:
Ваня любить автомобілі
ілюструє відношення між об'єктами Ваня і автомобілі; зв'язком є любить. Правило, яке визначає, коли речення:
Ваня любить автомобілі
буде істинним, має вигляд:
Ваня любить автомобілі, якщо вони швидкі.
Факти.
В Пролозі зв'язок між об'єктами називається фактом. Факти можуть виражати як властивості, так і відношення. Так речення:
Прапор червоний. Валя - студентка.
можуть бути задані наступними фактами:
червоний(прапор) студентка(Валя).
Правила визначають, які висновки можна зробити із даних фактів.
Запити.
Враховуючи, що Пролог складається з множини фактів, ми можемо задавати йому питання про ці відношення у вигляді запитів. Пролог будує відповідь і виводить її до друку.
Наприклад, речення Що любить Ваня може бути трасформоване в запит любить(ваня, Що). Важливо відмітити, що перший аргумент запиту починається з маленької букви (константа), а другий аргумент починається з великої букви (Що виступає в ролі змінної). Змінні Прологу дозволяють вам записувати загальні факти і правила, а також задавати загальні питання.
Узагальнення.
1.Програма на Пролозі будується із двох типів фраз (речень): фактів і правил.
Факти - це відношення, або ж властивості, про які ви, програміст, знаєте, що вони істинні.
Правила - це залежні відношення; вони дозволяють Прологу робити виведення, порівнюючи одну частину інформації з іншою.
2.Правила Прологу складаються з трьох частин: голови, символу, тіла.
Голова - це факт, який буде вірним, якщо деяка кількість умов виконається. Голову ще іноді називають заключенням, або ж відношенням залежності.
Символ - відділяє голову правила від тіла; може бути текстовим типу or або ж if.
Тіло - це множина умов (або список файлів), котрі повинні бути істинними, для того щоб Пролог міг довести, що голова правила вірна.
Розглянемо наступну програму:
predicates
can_buy(symbol, symbol)
person(symbol)
car(symbol)
likes(symbol, symbol)
for_sale(symbol)
clauses
can_buy(X, Y) :-
person(X),
car(Y),
likes(X, Y),
for_sale(Y).
person(kelly).
person(judy).
car(lemon).
car(hot_rod).
likes(kelly, hot_rod).
likes(judy, pizza).
for_sale(pizza).
for_sale(lemon).
for_sale(hot_rod).
Можна задати такі питання:
Що можуть купити judy i kelly? can_buy(judi,X) can_buy(kelly,X).
Хто може купити бутерброд з гарячою сосискою? can_buy(X,hot_rod).