Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_lab_Visual_Prolog программисты дневное.doc
Скачиваний:
3
Добавлен:
02.05.2019
Размер:
451.58 Кб
Скачать

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 „Виконання програми” з додатку А.

Переконайтеся, що ви добре розумієте, як працює програма.

      1. Закрийте проект і знову завантажте його, використовуючи відомості з розділу 5 „Завантаження проекту, що існує” з додатку А..

      2. Зверніть увагу на вказівки до кожного прикладу.

Приклад 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.

Порядок дій при написанні програми:

  1. З’ясуйте, які об’єкти є у завданні, які властивості мають ці об’єкти, або з’ясуйте відношення між об’єктами. Наприклад: об’єкт студент, його властивості прізвище, середній бал. Об’єкт кількість, властивість його значення.

  2. Зробіть функтором предикату назву об’єкту, а аргументами предикату властивості об’єкту. Або оберіть функтором предикату відношення, а аргументами предикату об’єкти. Наприклад, Stud(“Петренко”,4.5) і count(0).

  3. Сформулюйте на основі цих відношень безумовні твердження у предикатній формі – факти. З’ясуйте чи будуть змінюватись аргументи фактів. Наприклад: факт Stud(“Петренко”,4.5). змінюватися не буде. Факт count(0). буде змінюватися count(1), тощо.

  4. Визначте предикати, які ви використовуєте для запису фактів що не змінюються, в секції Predicates. Визначте предикати для фактів, що будуть змінюватися, в секції Facts.

Наприклад: Facts

Count(integer)

Predicates

Stud(string, real)

  1. Сформулюйте питання до завдання як кон'юнкцію або диз’юнкцію цілей(декілька цілей об’єднаних логічним „AND” або “OR”) і розташуйте її в секції Goal;

  2. Опишіть в тілі правила послідовність дій, які треба виконати, щоб одержати необхідний результат .

Для завдання прикладу 3 треба виконати наступні дії:

  • встановити кількість студентів в 0;

  • одержати відомості про середній бал студента з першого факту;

  • перевірити чи середній бал більше 4.0;

  • якщо умова вірна, то замістити факт з кількістю студентів 0 фактом з кількістю студентів 1;

  • дії повторити поки факти не закінчаться;

  • по закінченню фактів вивести на екран одержану кількість студентів.

    1. Розташуйте факти і правила в секції Clauses в необхідному порядку згідно умовам задачі;

    2. Зверніть увагу на змінні у вашій програмі. Переконайтесь, що ви вірно використовуєте в своїй програмі механізм передачі значень змінних від твердження до твердження, а також механізм звороту.

    3. Збережіть програму на диск в каталог свого проекту;

  1. При налагодженні програм лабораторної роботи треба буде завантажувати вже існуючий проект. Завантаження проекту виконуйте за інструкцією „Завантаження Test Goal проекту, що існує” з додатку А - „Робота в середовищі Visual Prolog V 5.2”.

  2. Налагодьте вашу програму. Під час налагодження вашої програми використовуйте стандартний предикат виводу значень змінних WRITE, щоб слідкувати за значеннями змінних під час виконання програми.

  3. При налагодженні програми можна також використовувати налагоджувач Visual Prolog - Debugger.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]