Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц1-3.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
259.58 Кб
Скачать

Лекція 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".