- •2.1 Мета роботи 23
- •3.1 Мета роботи 29
- •4.1 Мета роботи 39
- •Література 51
- •Передмова
- •1 Лабораторна робота № 1 елементарні програми на пролозі. Робота з твердженнями програми за допомогою механізму звороту
- •1.1 Мета роботи
- •1.2 Методичні вказівки до виконання лабораторної роботи
- •1.3 Завдання на лабораторну роботу
- •Дан набір фактів, які мають такі відомості про книги: прізвище автора, назву книги і рік видання. Знайти і вивести на екран по кожному автору назви його книг і їх кількість.
- •1.5 Контрольні питання
- •2 Лабораторна робота № 2 робота з рядками методом висхідної рекурсії
- •2.1 Мета роботи
- •2.2 Методичні вказівки до виконання лабораторної роботи
- •2.3 Завдання на лабораторну роботу
- •2.5 Контрольні запитання
- •3 Лабораторна робота № 3 робота зі списками методом низхідної рекурсії
- •3.1 Мета роботи
- •3.2 Методичні вказівки до виконання лабораторної роботи
- •3.3 Завдання на лабораторну роботу
- •3.5 Контрольні запитання
- •3.5.2 Яким типом даного може бути голова списку і яким типом може бути хвіст списку?
- •4 Лабораторна робота № 4 предикати вводу-виводу.Робота з файлами
- •4.1 Мета роботи
- •4.2 Методичні вказівки до виконання лабораторної роботи
- •4.3 Завдання на лабораторну роботу
- •4.5 Контрольні запитання
- •Додаток а підготовка та виконання програми в середовищі visual prolog 5.2
- •1. Утворення нового проекту в середовищі Visual Prolog 5.2
- •На вкладці General ввести:
- •На вкладці Target обрати:
- •2.Опції компілятору
- •8. Обробка помилок
- •9. Текстовий редактор Visual Prolog
- •Література
1 Лабораторна робота № 1 елементарні програми на пролозі. Робота з твердженнями програми за допомогою механізму звороту
1.1 Мета роботи
Мета роботи. Навчитися писати, будувати, виконувати і налагоджувати елементарні програми на Пролозі.
Для реалізації вказаної мети треба:
навчитися утворювати факти статичної і динамічної баз даних і працювати з ними;
навчитися утворювати правила статичної бази даних і працювати з ними;
навчитися організовувати цикли на Пролозі за допомогою механізму звороту.
1.2 Методичні вказівки до виконання лабораторної роботи
1.2.1 Завантажте середовище візуального Прологу – Visual Prolog 32 з меню Пуск: усі програми Visual Prolog 5.2; Visual Prolog 32.
1.2.2 Для виконання лабораторної роботи треба утворити новий проект. Утворення нового проекту виконайте за відомостями розділу 1 „Утворення нового проекту в середовищі Visual Prolog 5.2” з додатку А – „Підготовка та виконання програми в середовищі Visual Prolog 5.2”.
1.2.3 Відкрийте програму з розширенням Pro і виконайте заміщення вмісту файлу на перший приклад програми, яку подано нижче.
Встановити по замовчанню для всіх предикатів характеристику nondeterm див. розділ 2 „Опції компілятору” з додатку А.
Для роботи з кирилицею виконайте установку вказану в додатку А розділ 3 „Застосування кирилиці”.
1.2.4 Виконайте перший приклад програми, яку подано нижче за допомогою утілити Test Goal, використовуючи відомості з розділу 4 „Виконання програми” з додатку А.
Переконайтеся, що ви добре розумієте, як працює програма.
Закрийте проект і знову завантажте його, використовуючи відомості з розділу 5 „Завантаження проекту, що існує” з додатку А..
Зверніть увагу на вказівки до кожного прикладу.
Приклад 1
Дан набір фактів з відомостями про студентів: прізвище, середній бал. Вивести на екран прізвище студента, середній бал якого 4.0.
Predicates
nondeterm Stud(string, real)
Do
Goal
Do.
Clauses
Stud(“Петренко”,4.5).
Stud(“Антонов”,4.0).
Stud(“Балаян”,4.3).
Do:- stud(Pr, 4.0), write(Pr).
Зверніть увагу, що Пролог сам шукає факт за вказаним середнім балом.
Приклад 2
Дан набір фактів з відомостями про студентів: прізвище, середній бал. Вивести на екран всі прізвища студентів, середній бал яких більше 4.0.
Predicates
nondeterm Stud(string, real)
nondeterm Do(real)
Goal
Do(4.0).
Clauses
Stud("Петренко",4.5).
Stud("Антонов",4.0).
Stud("Балаян",4.3).
Do(Bal):- stud(Pr, B), B>Bal,write(Pr),nl,fail.
Do(_).
Зверніть увагу, що середній бал 4.0 від цільового твердження до правила, передається через вільну змінну умовного твердження при зіставленні цільового твердження і умовного твердження. Аналогічно прізвище та середній бал з факту передаються у вільні змінні Pr і B предикату stud при зіставленні поточної цілі stud(Pr, B) з фактом.
Стандартний предикат fail включає механізм звороту, який перебирає всі факти, які подано предикатом stud. Механізм звороту передає керування на предикат, що має декілька розв’язків. Перед зіставленням предикату stud(Pr, B) з поточним фактом, механізм звороту звільнює змінні Pr і B, що робить можливим одержання нових значень у ці змінні.
Механізм звороту не звільнює змінну Bal, бо її значення одержано до роботи предикату stud(Pr, B).
Механізм звороту дозволяє організовувати цикли. Проте, значення змінних не можна зберігати від ітерації до ітерації, бо змінні звільнюються.
Приклад 3
Дан набір фактів з відомостями про студентів у файлі: прізвище, середній бал. Завантажити факти з файлу під час роботи програми та вивести на екран кількість студентів, середній бал яких більше 4.0.
Вхідний файл з ім‘ям stud.dat треба розмістити у каталозі Obj проекту. Файл не повинен мати порожніх рядків. В програмі вказати шлях до файлу обраний вами.
Вміст файлу:
stud("Іванов",4.5)
stud("Василенко",4.0)
stud("Коваленко",4.3)
Facts
single count(integer)
nondeterm Stud(string, real)
Predicates
nondeterm Do(real)
Goal
Consult(“Шлях до файлу\\obj\\stud.dat”),Do(4.0).
Clauses
count(0).
Do(Bal):-stud(_,B),B>Bal,count(N),N1=N+1, assert(count(N1)), fail.
Do(_):-count(N),write(N).
Зверніть увагу, як можна використати динамічну базу даних для підрахування кількості студентів. Факти динамічної бази даних можна вилучати, вставляти при роботі програми або заміщати.
Необхідною умовою при визначенні предикату кількості - є об’ява предикату з директивою компілятору single. Це означає, що даним предикатом може бути подано один і тільки один факт. Такий факт має тільки один розв’язок. При роботі механізму звороту на такий факт керування не передається. При вставці нового факту старий факт заміщується.
Використання механізму звороту разом з динамічними базами даних дозволяє організовувати цикли і зберігати значення змінних.
Приклад 4
Дан набір фактів з відомостями про студентів: прізвище, середній бал. Вивести на екран всі прізвища студентів, середній бал яких більше 4.0 або менше3.5.
Predicates
nondeterm Stud(string, real)
nondeterm Do(real,real)
Goal
Do(4.0, 3.5).
Clauses
Stud(“Петренко”,4.5).
Stud(“Антонов”,4.0).
Stud(“Балаян”,3.2).
Do(Bal1,Bal2):-stud(Pr,B), B>Bal1,write(Pr),nl,fail;
stud(Pr, B), B<Bal2,write(Pr),nl,fail.
Do(_,_).
Зверніть увагу, змінні, що подані в умовному твердженні зберігають свої значення при переході на нову гілку правила. Змінні, що подані в умовах загублюють свої значення для наступної гілки.
1.2.6 Напишіть завдання свого варіанту за № в журналі.
При написанні програми обов’язково використовуйте вказаний нижче порядок дій. Приклади, що наведені в пунктах подаються для завдання з прикладу 3.
Порядок дій при написанні програми:
З’ясуйте, які об’єкти є у завданні, які властивості мають ці об’єкти, або з’ясуйте відношення між об’єктами. Наприклад: об’єкт студент, його властивості прізвище, середній бал. Об’єкт кількість, властивість його значення.
Зробіть функтором предикату назву об’єкту, а аргументами предикату властивості об’єкту. Або оберіть функтором предикату відношення, а аргументами предикату об’єкти. Наприклад, Stud(“Петренко”,4.5) і count(0).
Сформулюйте на основі цих відношень безумовні твердження у предикатній формі – факти. З’ясуйте чи будуть змінюватись аргументи фактів. Наприклад: факт Stud(“Петренко”,4.5). змінюватися не буде. Факт count(0). буде змінюватися count(1), тощо.
Визначте предикати, які ви використовуєте для запису фактів що не змінюються, в секції Predicates. Визначте предикати для фактів, що будуть змінюватися, в секції Facts.
Наприклад: Facts
Count(integer)
Predicates
Stud(string, real)
Сформулюйте питання до завдання як кон'юнкцію або диз’юнкцію цілей(декілька цілей об’єднаних логічним „AND” або “OR”) і розташуйте її в секції Goal;
Опишіть в тілі правила послідовність дій, які треба виконати, щоб одержати необхідний результат .
Для завдання прикладу 3 треба виконати наступні дії:
встановити кількість студентів в 0;
одержати відомості про середній бал студента з першого факту;
перевірити чи середній бал більше 4.0;
якщо умова вірна, то замістити факт з кількістю студентів 0 фактом з кількістю студентів 1;
дії повторити поки факти не закінчаться;
по закінченню фактів вивести на екран одержану кількість студентів.
Розташуйте факти і правила в секції Clauses в необхідному порядку згідно умовам задачі;
Зверніть увагу на змінні у вашій програмі. Переконайтесь, що ви вірно використовуєте в своїй програмі механізм передачі значень змінних від твердження до твердження, а також механізм звороту.
Збережіть програму на диск в каталог свого проекту;
При налагодженні програм лабораторної роботи треба буде завантажувати вже існуючий проект. Завантаження проекту виконуйте за інструкцією „Завантаження Test Goal проекту, що існує” з додатку А - „Робота в середовищі Visual Prolog V 5.2”.
Налагодьте вашу програму. Під час налагодження вашої програми використовуйте стандартний предикат виводу значень змінних WRITE, щоб слідкувати за значеннями змінних під час виконання програми.
При налагодженні програми можна також використовувати налагоджувач Visual Prolog - Debugger.
