![](/user_photo/2706_HbeT2.jpg)
- •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. Предикати, що працюють з атрибутами файлів
- •Література
1.2. Сучасний стан логічного програмування
Теоретичний напрям „Логічне програмування”, працює на стику двох дисциплін: математичної логіки і теоретичного програмування.
Логічне програмування займається наступними питаннями:
шукає нові методи опису задачі;
шукає нові методи формального логічного висновку.
Мови, що побудовані на ідеях логічного програмування, відносять до декларативних мов. На декларативній мові описують завдання, а не визначають алгоритм.
Розвиток напряму „Логічне програмування” породив нову парадигму програмування „Логічне програмування”.
Взагалі парадигма програмування визначає спосіб мислення і програмування, що не пов’язаний з конкретною мовою програмування.
Парадигма програмування характеризується: засобами опису даних, методами і ефективністю цих методів до розв’язку певних класів задач.
Парадигма „Логічного програмування” така: Задача описується твердженнями на основі предикатів. Розв’язок задачі знаходиться за допомогою логічного виводу.
Методи „Логічного програмування” дозволяють розв’язувати задачі, які вимагають динамічного формування алгоритму розв’язку задачі під час роботи системи. Засоби опису даних дозволяють просто описувати знання предметної області у вигляді тверджень або будувати реляційні бази даних.
Мови логічного програмування традиційно застосовують для створення інтелектуальних систем: експертних систем, систем аналізу та прийняття рішень, систем машинних перекладів, програм розуміння текстів природної мови, навчаючих систем, тощо.
Однак „Логічне програмування” ефективно не тільки при розробці інтелектуальних систем.
Мови, що побудовані на ідеях логічного програмування, мають потужні механізми пошуку та перебору даних з механізмами відкату у випадку невдачі.
Такі механізми дозволяють просто і компактно розв’язувати класи задач, що працюють з великою кількістю даних і вимагають швидкого пошуку та перебору даних за багатьма ключами. Причому ключі для відбору можна динамічно змінювати, залишаючи програму без змін.
Мови логічного програмування дозволяють просто реалізовувати роботу зі структурами: списками, деревами, структурами будь якої складності, що визначає користувач.
Опис задачі на пролозі. Факти і правила
2.1. Опис задачі на пролозі
Пролог - декларативна мова. Програма на Пролозі описує задачу у вигляді тверджень на основі предикатів. Для більшості діалектів Прологу опис задачі використовується Пролог-машиною для розв’язку задачі за допомогою логічного виводу. Пролог-машиною називають виконуючу систему оболонки конкретної реалізації мови Пролог. Мова Visual-Prolog відрізняється від інших діалектів Прологу тим, що компілятор компілює опис задачі безпосередньо у машинний код, який реалізує логічний вивід.
Опис задачі на мові Пролог аналогічний опису задачі на природній мові. Такий опис складається з трьох типів тверджень: завжди істинні твердження; твердження істинність якого треба довести; твердження, які істинні при істинності умов. Для утворення тверджень програміст використовує дані задачі, або знання які відомі йому про об’єкти предметної області поза задачею.
Розглянемо задачу1: Відомо, що в родині, Дмитро батько Володимира, і Дмитро батько Олександра. Визначити, хто в родині брати.
Для формування тверджень виявляють в задачі об’єкти і відношення між об’єктами. Об’єкти задачі: Дмитро, Володимир, Олександр. Відношення між об’єктами задачі – батько, брати. Твердження формуються на основі відношень. Відношення між об’єктами можуть бути істинними. Існують також відношення між об’єктами, істинність яких невідома і її треба визначити.
Завжди істинні твердження формуються з істинних відношень. Їх одержують з того, що відомо в задачі.
Сформуємо істинні твердження:
Дмитро батько Володимира (1 );
Дмитро батько Олександра (2 ).
Сформуємо твердження, яке описує що треба знайти в задачі: Визначити X та Y, які є братами. Воно формулюється на основі відношення брати для об’єктів X та Y. Щоб знайти об’єкти предметної області, які є братами сформуємо умовне твердження разом з умовами, при яких умовне твердження істинне.
Для формування твердження істинного при істинності умов скористаємося знаннями про родинні стосунки. Невідомі об’єкти будемо позначати змінними. Відомо, що: X та Y будуть братами, якщо в них спільний батько Z.
Твердження істинне при істинності умов формується з відношення брати між X та Y. А умови, при яких умовне твердження буде істинним формуються з відношення батько для об’єктів X і Z та об’єктів Y і Z.
Кожний з розглянутих типів тверджень характеризується істинністю. Тому твердження на мові Пролог зручно записувати в предикатній формі.
Предикат – це логічна функція, що визначена на будь-якій предметній області, і яка приймає одне з двох значень: істина чи неправда.
Кожний тип твердження має свою форму запису(синтаксис). За синтаксисом компілятор Прологу визначає тип твердження.