- •1. Вступ в логічне програмування
- •1.1. Виникнення логічного програмування
- •1.2. Сучасний стан логічного програмування
- •Опис задачі на пролозі. Факти і правила
- •2.1. Опис задачі на пролозі
- •2.2. Факти
- •Цільове твердження
- •Умовні твердження
- •Приклад програми на пролозі
- •2.6. Виконання програми на пролозі
- •2.7. Статична та динамічна бази даних
- •2.8. Підготовка фактів для внутрішньої бази даних
- •2.9. Опис фактів внутрішньої бази даних
- •2.10. Предикати роботи з внутрішньою базою даних
- •2.11. Приклади використання внутрішньої бази даних
- •3. Основні поняття visual-prolog
- •3.1. Загальні відомості
- •3.3. Домени елементарних об’єктів
- •3.4. Терми
- •3.4.1. Константа
- •Анонімна змінна
- •3.4.3. Структури
- •3.5. Програма на пролозі
- •4. Механізми прологу
- •Механізм узгодження цілі з базою даних
- •4.2. Механізм звороту
- •4.3. Механізм звороту і відсік
- •4.4. Рекурсія
- •4.4.1. Рекурсивний метод розв’язку задач
- •Рекурсивні методи 2-х доменів:
- •Застосуємо висхідний метод рекурсії до розв’язку задачі:
- •Висхідна рекурсія
- •4.4.4. Предикат repeат
- •Міркування про те, як треба писати програму
- •5. Обробка рядків
- •5.1. Загальні відомості
- •1.1 Стандартні предикати обробки рядків
- •5.3. Лексиграфічне порівняння рядків
- •2Низхідна рекурсія
- •6.1. Метод низхідної рекурсії
- •6.2. Загальна характеристика рекурсивних методів
- •6.3. Низхідна та висхідна рекурсії
- •7. Робота зі списками
- •7.1. Списки. Оголошення списків
- •7.2. Увід-вивід списків
- •7.3. Основна операція на списках
- •7.4. Формування списків стандартним предикатом
- •Процедура з’єднує два списки.
- •Процедура розділяє список на два за вказаним елементом.
- •2.1 Сортування списків на пролозі
- •Сортування методом пухирця
- •7.8. Складені списки
- •8. Предикати вводу-вивіду
- •8.1. Предикати вводу
- •8.2. Предикати виводу
- •9. Файли
- •9.1. Символічне ім’я файлу
- •9.2. Вхідний і вихідний потоки
- •9.3. Організація файлу та методи доступу до файлу
- •9.4. Робота з файлами різними методами доступу
- •9.5. Закриття файлу
- •9.6. Предикати роботи з каталогами
- •9.7. Предикати, що працюють з атрибутами файлів
- •Література
4. Механізми прологу
Механізм узгодження цілі з базою даних
Базою даних Прологу вважають умовні твердження і факти. Виконання програми – процес узгодження цілі з базою даних. Ціль вважають узгодженою, якщо вона істина.
Ціль може бути складним або простим твердженням. При складній цілі, істинність цілі залежить від істинності предикатів, з яких вона складається. Предикати складної цілі розглядаються зліва направо і по черзі стають поточною ціллю.
Процес узгодження поточної цілі починається пошуком твердження умовного або безумовного з яким може зіставитися ціль. Для кожної поточної цілі пошук твердження ведеться з початку секції Clauses. Процес пошуку твердження при перегляді бази даних зверху вниз називають прямим трасуванням.
Процес зіставлення цілі з твердженням називають процедурою уніфікації.
Ціль може бути зіставлена з твердженням якщо:
Функтори цілі і твердження однакові;
Кількість аргументів у цілі і твердження однакові;
Типи аргументів, що стоять на відповідних місцях однакові;
Аргументи на відповідних місцях можна зіставити.
Аргументи можна зіставити якщо:
Вони обидва вільні змінні;
Один аргумент змінна вільна, а другий константа або конкретизована змінна;
Обидва аргументи однакові константи.
Передача параметрів від твердження до твердження завжди виконується при зіставленні поточного цільового твердження та інших тверджень бази даних.
Передача можлива через:
вільну змінну, яка зіставляється з константою або конкретизованою змінною;
механізм зчеплення вільних змінних.
Якщо знайдено твердження зіставимо з ціллю, то можливі такі варіанти:
Твердження факт і тоді поточна ціль узгоджена з базою даних;
Твердження умовне і воно буде істинним при істинності його умов. В цьому випадку для кожної умови повторюється процес, як у випадку зі складною ціллю.
Процес доведення істинності умов називають пошуком вглиб.
Після узгодження всіх поточних цілей необхідних для доведення цілі з секції Goal, ціль вважається узгодженою.
Розглянемо процес на прикладі: Нехай пасажиру треба з’ясувати час відходу потягів, що йдуть на Київ пізніше заданого часу. Програма одержує номера потягів, що йдуть на Київ пізніше заданого часу .
Predicates
Chas (integer, real, string)
oderg_chas
Goal
Clearwindow, oderg_chas.
Clauses
Chas (46,7.58,”Київ”).
Chas (83, 12.04, “Київ”).
Chas (75, 14.25, “Київ”).
Oderg_chas:- write(“Час ? ”), readreal(Ch),
Chas (N, Ch1,_), Ch1>Ch,
write (“ № поїзда ”, N, “ Час ”,Ch1),fail.
Oderg_chas.
Розглянемо дерево цілі для програми:
В прикладі ціль складне твердження:
Перша поточна цільgoal стандартний предикат, який очищує вікно істинна;
Друга поточна цільgoal істинна, вона вводить час;
Третя поточна цільgoal зіставляється з умовним твердженням cina (V). Умовне твердження істинно, якщо істинні умови:
Перша поточна цільcina істинна. Вона виводить на екран запитання;
Друга поточна цільcina стандартний предикат “nl”- new line істинна;
Третя поточна цільcina істинна вона вводить ознаку вагону;
Четверта поточна цільcina істинна, якщо вірно введено тип вагону і тому ціль зіставляється з фактом.
Вивід: умовне твердження Cina істинне.
Четверта поточна цільgoal істинна. Вона виводить на екран ціну білету.
П’ята поточна цільgoal Chas (N, Vrem1) має вільні змінні і зіставляється з фактом. Ціль істинна.
Шоста поточна цільgoal перевіряє умову Vrem1>Vrem, якщо умова невірна включається механізм звороту(пункт 6.1).
Звільнюються значення змінних N і Vrem1, які одержано з факту.
Перелагоджується ціль Chas (N, Vrem1) з наступним фактом.
Повторюється пункт 6.При вірній умові виконується пункт 7.
Сьома поточна цільgoal істинна. На екран виводиться № потягу і час відходу.
Восьма поточна цільgoal стандартний предикат “new line” істинна.
Дев’ята поточна цільgoal завжди невірна. Стандартний предикат fail завжди невірний.Включається механізм звороту, який передає керування на найближчий предикат, що розташовано ліворуч і має ще не переглянуті розв’язки. Це предикат Chas (N, Vrem1).
Звільнюються значення змінних N і Vrem1, які одержано з факту.
Перелагоджується ціль Chas (N, Vrem1) з наступним фактом.
Повторюються пункти 6-9.
Перебір фактів виконується до тих пір, поки будуть розв’язки у предиката Chas(N, Vrem1). По закінченню розв’язків ціль повертає fail. Однак необхідні відомості одержані.