- •Міністерство освіти і науки України Дніпропетровський національний університет
- •Структури та організація даних в еом
- •Дніпропетровськ
- •1. Понятие об информации
- •1.1. Объем информации
- •1.2. Количество информации
- •Вопрос 1: Забила ли Украина более одного гола? Да – 1 / Нет – 0;
- •Вопрос 2: Забила ли Италия более одного гола? Да – 1 / Нет – 0;
- •Вопрос 3: Забила ли Украина четное число голов? Да – 1 / Нет – 0;
- •Вопрос 4: Забила ли Италия четное число голов? Да – 1 / Нет – 0;
- •Вопрос1. Произошло ли с1? Да – 1;
- •Вопрос2. Произошло ли с2? Да – 01;
- •Вопрос3. Произошло ли с3? Да – 001;
- •2. Преобразование информации при решении задач на компьютере
- •Понятие данных
- •Информация и данные. Понятие о структурах данных. Информационная модель объекта
- •Понятие о данных
- •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. Основи мови програмування пролог 20
- •2. Підстави логічного програмування 30
- •3. Три семантичні моделі пролог-програми 35
- •4. Подання знань 38
- •Програмування мовою пролог
5.15. Керування базою даних (кбд)
Метод оснований на використанні бази даних ПРОЛОГу для запису ходу розвитку обчислювального процесу й складається з таких елементів:
предикати assert, asserta, assertz використовуються для внесення резуль-
татів у базу даних ПРОЛОГу. При керуванні базою даних порядок включення записів у базу даних може бути істотним. Для останніх двох випадків це може бути неважливо.
предикати retract і retractall використовуються для видалення записів із
бази даних. Інші випадки не допускають довільної і безладної зміни бази даних ПРОЛОГу. Це досягається чітким поділом програми на два етапи:
внесення даних і наступний за ним етап;
збір результатів і вилучення внесених тверджень.
Істотним є гарантія того, що при успішному завершенні етапу внесення даних завжди буде виконаний і етап збору результатів. Друга область застосування вимагає, щоб модифікація бази даних була обмежена нижнім рівнем програми, а етапи внесення даних і збору результатів завершувалися спільно. При цьому результат модифікації бази даних буде локалізований.
5.16. Глобальні змінні (гз)
Неузгодженість у роботі цих двох етапів може порушити роботу програми при будь-якій відмові в такій серії цілей. Необхідно гарантувати, що після етапу включення нових фактів не відбудеться ніякої відмови, що заблокувала б перехід до етапу збору й вилучення даних. У загальному випадку таку гарантію дає застосування цих предикатів тільки всередині процедур низького рівня й повернення накопичених результатів у процедури більш високого рівня через деякий аргумент виклику. Але іноді хотілося б застосовувати предикати assert і retract і на верхньому рівні (незважаючи на відзначені вище побоювання). Це буде виправданим, якщо для повернення результату з низького рівня програми на більш високий не можуть бути застосовані звичайні методи фіксації результату.
Наприклад, якщо ми повертаємо результат через аргумент, то ціла серія викликуваних модулів (у тому числі й рекурсивних) повинна “нести” цей допоміжний аргумент. Замість цього ми можемо допустити, що процедура заносить результат у базу даних ПРОЛОГу за допомогою побічного ефекту. У такому випадку ми можемо трактувати базу даних ПРОЛОГу як глобальну змінну. Це дуже зручно: будь-яка процедура може записувати в неї свій результат, що буде доступний будь-якій іншій процедурі, яка б не була дистанція між ними при їх послідовних динамічних викликах.
При цьому ми, звичайно, відмовимося від ідеї двохетапної структури, але можемо зберегти важливу перевагу такого застосування предиката, при якому побічні ефекти впливу на базу даних ПРОЛОГу анулюються при поверненнях. Ми хотіли б мати гарантію того, що наступні підцілі будуть погоджені; якщо це так, виклик не повинний давати відмову.
Цей підхід можна реалізувати в такий спосіб:
анулююче_включення(Твердження) :-
assert(Твердження).
анулююче_включення(Твердження) :-
retract(Твердження),
!,
fail.
При поверненні твердження, внесене в базу даних, буде вилучене за допомогою другого твердження, при цьому комбінація відсікання і предиката fail дасть гарантію того, що саме це повернення перерване не буде. За керуючою дією цей предикат нічим не відрізняється від убудованого предиката assert.
Ще однією проблемою, що стосується глобальної змінної, є їхній вплив на структуру програми. У програмі, що використовує глобальні змінні, є такі підцілі у деяких її частинах, для яких у вихідному тексті програми немає ніяких процедур. Результатом є програма, текст якої важко зрозуміти, а дія її важко піддається тестуванню та налагодженню.
Розглянемо приклад використання глобальної змінної в програмі на ПРОЛОЗі.