- •Міністерство освіти і науки України Дніпропетровський національний університет
- •Програмування мовою пролог
- •Дніпропетровськ
- •1. Основи мови програмування пролог
- •1.1. Основні поняття
- •1.2. Синтаксис мови пролог
- •1.3. Класифікація даних у пролозі
- •1.4. Приклад доказу в пролозі
- •1.5. Подання задачі у вигляді і-або дерева
- •1.6. Структура програми в системі tp
- •1.7. Убудовані типи даних мови tp
- •1.8. Висновки
- •2. Підстави логічного програмування
- •2.1. Принцип резолюцій
- •2.3. Способи застосування принципу резолюцій
- •2.4. Диз’юнкти хорhа
- •3. Три семантичні моделі пролог-програми
- •4. Подання знань
- •4.1. Процес подання знань
- •4.2. Способи подання бази знань
- •4.2.1. Представлення цілісних інформаційних елементів у вигляді фактів
- •4.2.2. Подання атрибутів у вигляді фактів
- •4.2.3. Представлення знань у вигляді списку структур
- •4.2.4. Подання у вигляді рекурсивних структур
- •4.2.5. Подання у вигляді двійкового дерева
- •4.2.6. Порівняння різних виглядів подання бази даних
- •4.2.7. Компонування даних у список
- •4.3. Використання складених об'єктів
- •4.4. Використання альтернативних доменів
- •4.5. Засоби документування програми
- •4.6. Типи й властивості відношень предметної області
- •4.6.1. Обмеження, що забезпечують цілсність відношень
- •4.6.2. Властивості відношень бази знань і їхня підтримка в програмі на tp симетрія і асиметрія
- •Рефлексивность і нерефлексивность
- •Транзитивність
- •Симетричність і транзитивність
- •Спроба 1
- •Спроба 2.
- •Запам'ятовування списку відвіданих місць
- •4.7. Списки
- •4.7.1. Подання й зображення списків
- •4.7.2. Використання списків
- •4.7.3. Метод поділу списку на голову і хвіст (псгх)
- •4.7.4. Списки списків
- •Методи програмування
- •5.1. Повторення і відкіт (пв)
- •5.2. Метод відкоту після невдачі (впн)
- •5.3. Метод відсікання та відкоту (вв)
- •5.4. Повторення та рекурсія (пр)
- •5.5. Метод узагальненого правила рекурсії (упр)
- •5.6. Побудова рекурсивних структур методом прогресуючої підстановки (пп)
- •5.7. Предикат відсікання
- •5.8. Організація багаторазово виконуваних інтерактивних програм (бвіп)
- •5.9. Метод аналізу станів (ас)
- •5.10. Метод організації висхідних рекурсивних обчислень (вро)
- •5.11. Комбінація спадних і висхідних рекурсивных обчислень (ксвро)
- •5.12. Предикат fail-if (not)
- •5.13. Предикат true
- •5.14. Модифікація бази даних (мбд)
- •5.15. Керування базою даних (кбд)
- •5.16. Глобальні змінні (гз)
- •5.17. Накопичування результатів у базі даних за допомогою вимушеного відкоту і глобальної змінної (нрввгз)
- •5.18. Метапрограмування (мп)
- •Список рекомендованої літератури
- •1. Основи мови програмування пролог 4
- •2. Підстави логічного програмування 14
- •3. Три семантичні моделі пролог-програми 20
- •4. Подання знань 23
- •Програмування мовою пролог
1.2. Синтаксис мови пролог
Синтаксис – це правила запису конструкцій мови. У математиці вирази складаються з об'єктів (числа, змінні), поєднаних за допомогою знаків операцій із застосуванням дужок. Операції бувають бінарні й унарні. Як правило, у математиці прийнята інфіксна форма запису виразів, тобто знак операції розташовується між операндами. Запис функцій використовує префіксну форму запису, тобто ім'я функції розташовується перед операндами, які, крім того, беруться у дужки, наприклад
(a/b + c/d)*(x + y)
cos(a+b)
-b/(2*a).
Існують мови (наприклад, мова ФОРТ), у яких застосовується постфіксна форма запису (тобто спочатку йдуть операнди, а потім – операція). Наприклад, наведений вище вираз у постфіксній формі запису з урахуванням дужок і пріоритетів операцій можна записати в такий спосіб:
a b / c d / + x y + * .
Така форма запису виразів називається зворотним польським записом і широко застосовується в трансляторах при обробці виразів.
При описі правил побудови виразів широко вживається поняття терма. Терм – це правильно побудований фрагмент виразу. Як правило, поняття терма визначається рекурсивно. Термами вважаються найпростіші вирази (наприклад, константи й змінні), а також терми, з'єднані за допомогою знаків операцій.
У ПРОЛОЗі для запису тверджень прийнята префіксна форма запису. Для запису математичних виразів може застосовуватися й инфіксна форма. У деяких реалізаціях ПРОЛОГу можна задавати свої власні інфіксні операції, що в такому випадку називаються операторами.
У нашому прикладі відношення “любить” має префіксну форму запису, а зв'язка “:-“ – це інфіксний бінарний оператор, що зв'язує між собою два операнди
Заголовок :-
Тіло.
Програма на ПРОЛОЗі складається з тверджень. Твердження будуються з об'єктів і операцій (предикатів), що можуть бути убудованими або визначеними користувачем.
1.3. Класифікація даних у пролозі
Усі об'єкти даних, використовувані в ПРОЛОЗі можна подати у вигляді такої схеми (рис. 2):
ДАНІ
ПРОСТІ СТРУКТУРИ
КОНСТАНТИ ЗМІННІ
ЧИСЛА АТОМИ
ЦІЛІ ДІЙСНІ
Рис. 2. Класифікація даних у ПРОЛОЗі
Структура складається з атома, що називається головним функтором структури, і послідовності термів – компонентів структури. Компоненти структури розташовують у дужках і відокремлюють один від одного комами. Функтор структури характеризується не тільки ім'ям, а й арністью. Арність структури визначається кількістю компонентів. Деякі функтори є операторами, тобто застосовують інфіксну форму запису.
Деякі найбільш важливі елементи мови можуть використовувати альтернативний синтаксис. Наприклад, список у ПРОЛОЗі – це послідовність елементів невизначеної довжини. Список може бути записаний у вигляді структури з бінарним функтором “.” (крапка). Список того, що любить Марія можна записати в такий спосіб:
. (яблука, .(персики, .(горішки, [ ])))
Як бачимо, арність функтора “.” – 2. Він з'єднує між собою голову списку (перший операнд) із хвостом списку (другий операнд). Хвіст списку – список без першого елемента. Хвіст списку – це завжди список. Знак [ ] служить для позначення атома – порожнього списку. Через особливу роль, яку відіграють списки в ПРОЛОЗі, для них допускається й альтернативний спосіб запису. Той же список можна подати таким чином:
[яблука, персики, горішки]
Будь-яка структура зберігається в пам'яті у вигляді дерева. Наприклад, наш список у пам'яті буде зберігатися таким чином:
.
яблука .
персики .
горішки [ ]
А правило, яке визначає, що ж любить Тетяна, буде зберігатися в такому вигляді:
:-
любить любить
тетяна Це марія Це
Найбільш важлива операція в ПРОЛОЗі – операція уніфікації (зіставлення зі зразком). Це бінарна операція, за допомогою якої в програмі відбуваються всі обчислення. Вона позначається знаком “=”. Наприклад,
X = яблука
Ця операція часто викликається і неявно при зіставленні цільового терму зі зразком, що зберігається в базі даних.
Правило виконання уніфікації: два терми будуть уніфіковані, якщо:
вони ідентичні;
змінним в обох термах можна надати значення (конкретизувати) об'єктів (у загальному випадку – термів) таким чином, що після підстановки цих об'єктів у терми замість змінних терми стануть ідентичними.
Розглянемо це більш докладно.
Правило уніфікації констант і змінних
Нехай є два терми S і T, звідси
якщо S і T – константи, то вони уніфіковані, якщо являють собою один і той же об'єкт;
якщо S – вільна змінна, а T – довільний об'єкт, то вони уніфіковані й S набуває значення T і навпаки.
Правило уніфікації структур
Якщо S і T – структури, то вони уніфіковані, коли:
вони мають однаковий головний функтор;
усі їхні відповідні компоненти уніфіковані.