
- •Лекція 1 Загальний огляд мови Пролог
- •1.1 Приклад програми: родинні відносини.
- •1.2 Факти.
- •1.3 Питання.
- •1.5 Конъюнкция цілей.
- •1.6 Правила.
- •1.7 Кон’юнкція в правилах.
- •1.8 Змінні в тілі правила.
- •Лекція 2 Синтаксис Прологу. Арифметика. Співставлення.
- •2.1.3 Структури.
- •2.1.4 Оператори - теж функтори.
- •2.2 Арифметика.
- •2.3 Операції порівняння.
- •2.4 Співставлення.
- •Лекція 3 Семантика Прологу.
- •3.2 Диз'юнкція цілей
- •3.3 Процедурна семантика
- •3.3.1 Приклад обчислення
- •3.3.2 Формальний опис процедури обчислення цілей.
- •3.4 Співвідношення між процедурним і декларативним змістом
Лекція 1 Загальний огляд мови Пролог
Зміст
1.1. Приклад програми: родинні відносини
1.2. Факти
1.3. Питання
1.4. Змінні
1.5. Кон’юнкція цілей
1.6. Правила
1.7. Кон'юнкція в правилах
1.8. Змінні в тілі правила
1.9. Структура пролог-програм
Пролог - це мова програмування, використовувана для рішення задач, у яких діють об'єкти і відносини між цими об'єктами.
Програма на пролозі складається з пропозицій, що можуть бути фактами, правилами або питаннями.
1.1 Приклад програми: родинні відносини.
Розглянемо дерево родинних відносин:
1.2 Факти.
Введемо відношення -батько- (parent) між об'єктами.
parent (tom, bob).
Це факт, що визначає , що Том є батьком Боба.
parent - ім'я відношення, tom, bob - його аргументи. Тепер можна записати програму, що описує все дерево родинних відносин.
parent (pam, bob).
parent (tom, bob).
parent (tom, liz).
parent (bob, ann).
parent (bob, pat).
parent (mary, ann).
parent (pat, juli).
Ця програма складається із семи пропозицій (тверджень), clause(клоз).
Кожний клоз записаний фактом у вигляді відношення parent.
При записі фактів треба дотримуватись наступних правил:
Імена усіх відносин і об'єктів з маленької букви.
Спочатку записується ім'я відношення, потім у круглих дужках через кому об'єкти.
Наприкінці ставиться крапка.
Ще приклад факту:
like (bob, pam).
Сукупність фактів у пролозі називають базою даних.
1.3 Питання.
До складеної бази даних можна задати питання.
Питання в звичайному пролозі починається з ?-.
Питання записується так само, як і факт.
Наприклад:
? - parent (bob, pat).
yes
Коли пролог одержує питання, він намагається зіставити його з базою даних. Такий факт знаходиться, відповідь: так (yes). На питання:
?-parent (bob,mary).
no
Відповідь буде ні (no), тому що такого факту в базі даних немає.
1.4 Змінні.
Можна поставити запитання і довідатися хто батько liz:
?-parent (X, liz).
X= tom
Тут X - змінна. Її величина невідома і вона може приймати значення. У даному випадку її значенням буде об'єкт, для якого це твердження істинне.
Питання:
?-parent (X, bob).
X=tom
X=pam
Можно поставити запитання, хто є чиїм батьком. Або знайти такі X і Y, що X є батьком Y.
?-parent (X, Y).
X= pam
Y= bob
Y= tom
X= bob
і т.д.
1.5 Конъюнкция цілей.
Можна задати більш загальне питання: Хто є батьком батька juli. Оскільки немає відношення grandparent, то можна розбити на два питання:
Хто батько juli. Припустимо- Y.
Хто батько Y. Припустимо- X.
Тоді складене питання:
?-parent (Y, juli), parent (X, Y).
X=bob
Y=pat
При пошуку рішення спочатку знаходиться Y , а потім по другій умові Х.
Питання: Хто онуки Тома?:
?-parent (tom, Y), parent (Y, X).
Y=bob
X=ann
Y=bob
X=pat
І нарешті, є чи в ann і pat загальний батько?
?-parent (Y, ann), parent(Y, pat).
Y=bob
1.6 Правила.
Введемо відношення дитина child, зворотне до parent "батько".
Можна було б визначити аналогічно:
child (liz, tom).
Але можна використовувати, що відношення child назад до parent і записати у вигляді твердження- правила:
child(Y, X):-parent (X, Y).
Правило читається так:
Для всіх X і Y Y -child X, якщо X -parent Y.
Правило відрізняється від факту тим, що факт завжди істина, а правило описує твердження, що буде істинним, якщо виконано деяку умову. Тому в правилі виділяють: висновок умова
child(Y, X) :- parent (X, Y).
child(Y, X) :- parent (X, Y). |
||
голова head |
|
тіло body |
Якщо умова parent (X, Y). виконується, то логічним наслідком з нього буде твердження child(Y, X).
Як правило використовується прологом:
Поставимо запитання
?-child(liz, tom).
У програмі немає даних про child.
Але є правило, що вірно для всіх X Y, у тому числі для liz і tom.
Ми повинні застосувати правило для цих значень.
Для цього треба підставити в правило замість X- tom, a замість Y - liz.
Говорять, що змінні будуть пов'язані, а операція буде називатися підстановкою.
Одержуємо конкретний випадок для правила
child(liz, tom):-parent (tom, liz).
Умовна частина прийняла вид
parent (tom, liz).
Тепер треба з'ясувати чи виконується ця умова. Вихідна мета child(liz,tom) заміняється подцелью parent (tom, liz)., що виконується, тому пролог відповість "yes".