- •Міністерство освіти і науки України Дніпропетровський національний університет
- •Структури та організація даних в еом
- •Дніпропетровськ
- •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.12. Предикат fail-if (not)
Для виразу інверсних умов у ПРОЛОЗі передбачений убудований предикат fail_if (або not). З урахуванням недоліків відсікання застосування цього предиката може виявитися більш доцільним.
Визначення предиката fail-if(not). Аргументом виклику повинна бути структура. Ця структура викликається як ціль. Предикат дає відмову, якщо ця ціль успішно узгоджується, і успішно узгоджуєься, якщо ця ціль дає відмову. При відкотах цей предикат може бути узгоджений повторно.
Приклад. Об'єднання двох множин.
Варіант 1. Без застосування відсікання – інверсна сторожова ціль виражена явно за допомогою предиката not.
об'єднання([ ], S, S).
об'єднання([H | T], S1, S2):-
належить(H, S1),
об'єднання(T, S1, S2).
об'єднання([H | T], S1, [H | S2]):-
not(належить(H, S1)), % сторожува ціль
об'єднання(T, S1, S2).
Варіант 2. З використанням відсікання – інверсна сторожова ціль виражена неявно за допомогою предиката “!”.
об'єднання([ ], S, S).
об'єднання([H|T], S1, S2):-
належить(H, S1), !,
об'єднання(T, S1, S2).
об'єднання([H|T], S1, [H|S2]):-
%not(належить(H, S1)), - тепер ця сторожова ціль є зайвою
об'єднання(T, S1, S2).
У кожній версії три твердження виражають три взаємно виключні стани:
1) перший список порожній;
2) голова першого списку міститься в другому;
3) голова першого списку не міститься в другому.
У першому розв’язку твердження можуть бути розташовані в довільному порядку. Але другий розв’язок є більш ефективним, завдяки тому, що не має повторної перевірки на належність множині.
5.13. Предикат true
Іноді має сенс застосовування нульарного предиката true, при якому ціль завжди узгоджується і не робить ніякої дії. При поверненні ніколи не узгоджується повторно.
5.14. Модифікація бази даних (мбд)
Убудовані предикати, asserta, assert і assertz дозволяють програмісту додавати нові й переводити існуючі твердження в базу даних ПРОЛОГу.
Визначення предикатів asserta, assert і assertz (аргументом цілі повинна бути структура). Ціль завжди узгоджується і при відкотах не може бути узгоджена повторно. Побічним ефектом узгодження цілі є додавання цієї структури в базу даних ПРОЛОГу. Структура трактується як твердження процедури й міститься перед (предикати assert, asserta) чи після (assertz) уже наявних тверджень цієї процедури.
Визначення предиката retract (аргументом цілі повинна бути структура). У базі даних шукається перше таке твердження, що узгоджується з цією структурою. Якщо таке узгодження проведене, ціль уважається успішною. Побічний ефект узгодження цілі полягає в усуненні твердження з бази даних. У противному разі ціль дає відмову. При відкотах ціль здатна узгоджуватися повторно з видаленням наступних знайдених тверджень.
Оскільки ці предикати додають нове твердження в базу даних за допомогою побічного ефекту, твердження буде збережене (чи вилучене), навіть якщо ПРОЛОГ зробить відкіт через зазначені цілі.
Визначення предиката retractall (аргументом цілі повинна бути структура). Ціль завжди узгоджується. Побічний ефект узгодження цілі полягає у видаленні усіх тверджень, заголовки яких зіставляються з цією структурою. При поверненнях ціль не може узгоджуватися повторно.
Предикат retractall можна задати за допомогою такого визначення:
retractall(Заголовок) :-
retract(Заголовок), /* видаляються усі факти */
fail.
retractall(Заголовок) :-
retract((Заголовок :- Тіло)), /* видаляються всі правила */
fail.
Синтаксис ПРОЛОГу вимагає виводу в дужки структури, поданої у формі Терм1 :- Терм2, якщо ця структура виступає в ролі компонента іншої структури.
ПРИМІТКА. У реалізації TP аргументами предикатів asserta, assert, assertz і retract можуть виступати тільки факти (тобто можуть додаватися і вилучатися тільки факти). Отже, у середовищі TP предикат retractall у такому вигляді не може бути реалізованим.
У наступних розділах будуть продемонстровані області застосування запропонованих предикатів. Модифікація бази даних може знадобитися в таких випадках:
керування базою даних;
запобігання втраті результатів виконання процедури при відкотах;
забезпечення взаємодії окремих частин програми через глобальні змінні.