- •1. Основи мови програмування пролог
- •1.1. Основні поняття
- •1.2. Синтаксис мови пролог
- •1.3. Класифікація даних у пролозі
- •1.4. Приклад доказу в пролозі
- •1.5. Подання задачі у вигляді і-або дерева
- •1.6. Структура програми в системі tp
- •2. Підстави логічного програмування
- •1.7. Убудовані типи даних мови tp
- •1.8. Висновки
- •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. Метапрограмування (мп)
- •Список рекомендованої літератури
- •Програмування мовою пролог
4.2.6. Порівняння різних виглядів подання бази даних
Найбільш важлива відміність у поданні полягає в тому, що для доступу до даних у кожному випадку потрібний свій алгоритм:
а) перші два методи (4.2.1; 4.2.2) організують доступ за допомогою вбудованого в систему алгоритму пошуку з поверненням (backtracking algorithm);
б) останні три методи (4.2.3; 4.2.4; 4.2.5) вимагають застосування рекурсивного алгоритму.
У разі подання у вигляді двійкового дерева доступ до інформації буде найбільш швидким, тому що для пошуку конкретного запису буде потрібно переглянути менше записів.
4.2.7. Компонування даних у список
У процесі обробки бази даних іноді доцільно переходити від одного способу подання бази даних до іншого. Наприклад, від фактів – до списку. Для цього в системі є вбудований предикат findall. Він має наступний формат:
findall(Змінна, Предикатний_вираз, Список)
У предикатному виразі обов'язково повинна брати участь змінна – перший аргумент предиката findall. Результатом роботи процедури буде список, що складається з тих значень змінної, при яких предикатний вираз успішно зіставляється з одним із тверджень (фактом) бази даних.
Наприклад, нехай у базі даних зберігається інформація про кількість м’ячів, що забиті командами в матчах чемпіонату України:
м’ячі (кривбасс, 43).
м’ячі (дніпро, 49).
м’ячі (динамо, 35).
Необхідно підрахувати сумарну кількість м’ячів, що забиті всіма командами в чемпіонаті:
Сумарні_ м’ячі: -
findall (М’ячі, м’ячі (_,М’ячі), Список_ м’ячів),
сума_списку(Список_ м’ячів, Сума),
write(Сума).
Ця програма працює в такий спосіб: предикат findall будує список м’ячів, передає його процедурі сума_списку, що їх підсумовує, і знайдена сума роздруковується.
4.3. Використання складених об'єктів
Розглянемо приклад:
любить(марія, персики).
фрукти(персики).
Функтор “любить” поєднує у відношення “любить” два об'єкти “марія” і “персики”. Об'єкти “марія” і “персики” є прості тому, що вони описують самі себе (атоми). Якщо об'єкт представляє сам себе, то ми його будемо називати простим. Відповідно й структура, що складається з простих об'єктів, буде називатися простою. Але Марія може любити якісь фрукти, книги й т.ін. Те, що персики – це фрукти, ми виразили у вигляді окремого факту. Але це ж можна виразити й безпосередньо в сруктурі відношення “любить”.
любить(марія, фрукти(персики)).
любить(марія, книги(“Три мушкетери”)).
Об'єкт, що представляє інший об'єкт чи сукупність об'єктів, називається складеним, а структура, що його описує, також буде називатися складеною, тому що вона скомпонована зі складених об'єктів. Для полегшення написання тверджень і предикатів із використанням складених об'єктів TP дозволяє описувати складені об'єкти в розділі DOMAINS:
DOMAINS
фрукти = фрукти(symbol)
книги = книга(symbol)
DATABASE
любить(symbol, фрукти)
любить(symbol, книги)
Ім'я “фрукти” представляє одночасно домен, складений об'єкт (як частина структури для екземпляра відношення “любить”) і функтор (але не предикат).
Якщо об'єкти структури належать до того ж самого доменного типу, то ця структура називається однодоменною:
DOMAINS
три_фрукти = фрукти(symbol, symbol, symbol)
DATABASE
любить(symbol, три_фрукти)
CLAUSES
любить(марія, три_фрукти(персики, яблука, апельсини))
Якщо ж структура містить об'єкти різних типів, то вона називається багатодоменною. Застосування доменної структури спрощує визначення предиката. Якщо не застосовувати доменну структуру, то програмі необхідно було б використовувати всі атрибути на одному рівні. Наприклад, предикат “любить”, описаний у попередньому прикладі, мав би такий вигляд:
любить(марія, персики, яблука, апельсини).
Тобто всі атрибути розглядалися б як окремі самостійні сутності.
