- •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. Предикати, що працюють з атрибутами файлів
- •Література
2.2. Факти
Твердження, що, за умовою задачі, завжди істинні, називаються безумовними твердженнями - фактами. Факт записується за допомогою предикату: першим вказують ім'я предикату, в дужках - аргументи предикату через коми. Факт завжди закінчується крапкою.
Для нашої задачі ім’я предикату вказує на відношення між людьми, а аргументи на людей. В предикатній формі факти запишуться:
father (“Дмитро”, ”Володимир”).
father (“Дмитро”, ”Олександр”).
Аргументи предикату мають певний порядок. Програміст сам вирішує, на якому місці ставити певний аргумент. Але якщо порядок аргументів у предикату вже обраний, то він використовують у всій програмі. В розглянутому прикладі батько „Дмитро” є першим аргументом предикату, а син „Володимир” другим аргументом предикату.
За ім’я предикату можна також обирати назву об’єкту, а його аргументами властивості об’єкту.
Задача2. Відомі такі відомості про пасажирів літаку: місце, кількість речей, вага речей пасажира. Вивести відомості про пасажира на екран.
Ім’ям предикату зручно обрати baggage, а аргументами - властивості багажу. Наприклад, факт, що описує багаж запишеться: baggage (1, 2, 24.6).
Дію, що треба виконати у завданні можна позначити як предикат do. Дія буде виконана, якщо виконаються такі дії: одержати відомості про першого пасажира; вивести їх на екран; повторити дії для всіх пасажирів.
Опис дії do можна подати умовним твердженням, де умови кожна з вказаних дій.
Тоді опис дії задачі буде описано:
Do:-baggage(N, Kol, Ves), write(N,’ ‘,Kol,’ ‘,Ves,’ ‘),nl,fail.
Де:
baggage(N, Kol, Ves) – у змінні N, Kol, Ves одержуються № місця, кількість речей і вага речей відповідно для певного пасажира;
write(N,’ ‘,Kol,’ ‘,Ves,’ ‘),nl – вивід відомостей і перевод курсору на новий рядок;
fail – стандартний предикат, який завжди повертає неправду. Ним вказується, що дії ще не виконані, і треба знайти інший розв’язок.
У деяких задачах зручно властивість об’єкту подавати як ім’я предикату, а об’єкти з цією властивістю аргументами предикату. Наприклад, книга, газета, журнал – друкований матеріал: drukovan(“книга”, “журнал”, “газета”).
Ім'я предикату називається функтором. У прикладах функтори: father, baggage. Функтор предиката можна писати як з маленької, так і з великої букви.
Предикат може не мати аргументів. Тому може існувати факт:go.
Цільове твердження
Другий тип твердження – цільове. Ціль визначає, що треба знайти в задачі, і може записуватися як:
одиночна ціль;
кон’юнкція цілей, цілі поєднуються логічною операцією AND. Логічна операція AND позначається комою.
Цільове твердження закінчується точкою.
У нашій задачі цільове твердження можна подати, як одиночну ціль: brother (X, Y). Знайти братів в родині.
Цільове твердження можна також подати, як кон’юнкцію цілей:
brother (X, Y), write(X,’ ‘, Y). Знайти братів в родині і вивести на екран їх імена.
Цільове твердження може бути також подано як діз’юнкція цілей:
brother (X, Y);
sister(X,Y).
Знаходження розв’язку задачі в Пролозі виконується через доведення істинності цілі. Для доведення істинності цільового твердження використовують умовні твердження.