- •Міністерство освіти і науки України Дніпропетровський національний університет
- •Програмування мовою пролог
- •Дніпропетровськ
- •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
- •Програмування мовою пролог
4. Подання знань
4.1. Процес подання знань
Використання мови ПРОЛОГ для подання знань про предметну область розподіляється на ряд етапів.
1. Фахівець вивчає предметну область з метою з'ясувати усі значимі сутності й важливі відношення між сутностями предметної області, наприклад (рис 5).
чоловік-або-жінкаІван Марія
батьки
брат-чи-сестра Петро Катерина Павло
Рис. 5. Приклад відношень предметної області
2. Програміст вибирає символічні позначення для подання кожної сутності й кожного відношення предметної області, наприклад:
DOMAINS
член_родини = symbol
DATABASE
батьки (член_родини, член_родини)
PREDICATES
чоловік_або_жінка (член_родини, член_родини)
брат_чи_сестра(член_родини, член_родини)
Знання про предметну область можуть бути двох видів: фактуальні та концептуальні.
Фактуальні знання містять інформацію про конкретні екземпляри відношень, що існують у предметній області. Вони описуються в розділі DATABASE. Для нашого прикладу такими знаннями слугують конкретні екземпляри відношення “батьки”.
Концептуальні знання містять узагальнені знання про предметну область і метазнання (знання про знання). Ці описи мають на меті подати структуру, властивості й поводження класів об'єктів предметної області. При цьому мається на увазі, що такий опис, складений для класу, буде справедливий для будь-якого об'єкта цього класу. Ці знання описуються в розділі PREDICATES. Для нашого прикладу такими знаннями є відношення “чоловік-або-жінка” і “брат_чи_сестра”. У базі даних не існує конкретних екземплярів цих відношень, але вони можуть бути виведені з правил для відношень “чоловік-або-жінка” та “брат_чи_сестра” і конкретних екземплярів відношення “батьки”.
3. Фахівець визначає кожне відношення семантично, а також визначає конкретні реалізації кожного екземпляра відношення предметної області (рис. 5).
4) Програміст аксіоматично визначає кожне відношення за допомогою фраз ПРОЛОГу (у розділі CLAUSES), наприклад:
CLAUSES
/* Фактуальные знання */
батьки(іван, петро).
батьки(іван, катерина).
батьки(іван, павло).
батьки(марія, петро).
батьки(марія, катерина).
батьки(марія, павло).
/* Концептуальні знання */
чоловік-або-жінка (X,Y):-
батько(X,Z),
батько(Y,Z).
/* Чоловіками будемо вважати тих, хто має загальних дітей */
брат_чи_сестра(X,Y):-
батько(Z,X),
батько(Z,Y).
/* братами чи сестрами є ті члени родини, що мають загальних батьків */
4.2. Способи подання бази знань
Існує декілька способів подання бази знань засобами мови ПРОЛОГ. Розглянемо їх.
4.2.1. Представлення цілісних інформаційних елементів у вигляді фактів
Розглянемо базу даних про службовців деякої установи.
/* Ім'я Відділ Посада Оклад */
сл1 (іванов, 100, оператор, 200).
сл1 (петров, 200, керівник, 700).
сл1 (сидоров, 200, менеджер, 715).
Щоб надрукувати всіх службовців відділу 200 можна у вікні Dialig поставити таку ціль “сл1 (Ім'я, 200, Посада, _ )”.
Зверніть увагу, що на місці окладу поставлено анонімну змінну. Це означає, що в даному запиті нас не цікавить оклад. Але для дотримання синтаксису його наявність у запиті необхідна.