- •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. Предикати, що працюють з атрибутами файлів
- •Література
Умовні твердження
Третій тип твердження – умовне. Умовне твердження записується разом з умовами. Такий запис називають правилом. За допомогою правила визначають істинність умовного твердження.
Умовне твердження і умови записуються за допомогою предикатів.
Розглянемо приклад правила для нашої задачі:
brother (X, Y):- father (Z, X), father (Z, Y), X<>Y. (1)
Правило читається: X та Y брати, якщо Z батько X і Z батько Y і X<>Y. Умова 3 виключає випадок, щоб людина була братом сама собі.
В прикладі умовне твердження - brother (X, Y) .
Умовами будуть:
father (Z, X) 1 умова ;
father (Z, Y) 2 умова;
X<>Y 3 умова.
Символи „:-” відокремлюють умовне твердження від умов. Замість вказаних символів можна писати „IF”. Умовне твердження називають головою правила, а умови тілом правила.
Умови правила поєднуються у складне твердження за допомогою коми, яка означає логічну операцію „AND” (кон’юнкцію цілей). Замість коми можна писати логічну операцію „AND”. Правило закінчується точкою.
Правило (1) можна записати у формі:
brother (X, Y) if father (Z, X) and father (Z, Y) and X<>Y.
Умовне твердження буде істинним, якщо істинні його умови. При доведенні істинності умов вони стають поточними цільовими твердженнями. Істинність умов доводиться на основі фактів або інших умовних тверджень, для яких показано, що вони істинні.
Аргументи предикату, за допомогою якого подають умовне твердження, мають змінні. Кожна змінна може приймати певну множину значень. Щоб сформулювати умовне твердження істинне для цих множин об’єктів, змінні умовного твердження, пов’язують операцією - квантором загальності - .
Тобто умовне твердження буде істинним для будь-яких X та Y, для яких виконуються умови. Змінні умов пов’язані квантором існування - . Тобто умовне твердження істинно, якщо існують такі значення змінних Z, X, Y для яких умови істинні.
Використовуючи квантори, умовне твердження формулюється:
(X, Y) брати, якщо Z батько X та Y.
Умовне твердження може мати кілька наборів умов. Набори умов поєднуються в одне складне твердження логічною операцією “OR”(діз’юнкція цілей). Замість вказаного символу пишуть „ ; ”.
Наприклад:
brother (X, Y):-father (Z, X), father (Z, Y), X<>Y;
mother (Z1,X), mother (Z1,Y), X<>Y.
Пролог розглядає умовне твердження з декількома наборами умов, як декілька окремих правил з однаковим умовним твердженням і одним набором умов.
Наприклад, правило з декількома умовами:
brother (X, Y):-father (Z, X),father (Z, Y), X<>Y; (2)
mother (Z, X),mother (Z, Y), X<>Y.
Пролог розглядає як два правила:
brother (X, Y):-father (Z, X),father (Z, Y), X<>Y. (3)
brother (X, Y):-mother (Z, X),mother (Z,Y), X<>Y. (4)
Тому змінна Z з першого набору умов правила (2) і змінна Z з другого набору умов правила (2) – різні змінні.
Правило можна розглядати як процедуру, а умови як дії, що треба виконати для одержання результату.
Тоді процедура brother (X, Y) шукає братів в родині. Для цього треба: знайти батька для члена родини чоловічої статі, знайти іншого сина у цього батька, перевірити, що він не брат сам собі.