You are on page 1of 13

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ БІОТЕХНОЛОГІЙ І

ПРИРОДОКОРИСТУВАННЯ
Факультет інформаційних технологій
Кафедра комп’ютерних наук

Методи та системи штучного інтелекту

Лабораторна робота №2

«Структура програми в середовищі розробки Visual Prolog»

(4 години)

Київ - 2023
Мета роботи: вивчити найпростіші прийоми роботи в середовищі
Visual Prolog.

Підготовка до роботи: Вивчити і уяснити призначення і зміст завдання


до лабораторної роботи.

Завдання:
1. Ознайомитись з методичною розробкою до лабораторноъ роботи.
2. Ознайомитись з рекомендованною літературою.
3. Дослідити основні процеси створення програмних додатків в
середовищі Visual Prolog.
4. Виконати завдання до лабораторної роботи..
5. За результатами досліджень скласти звіт з обґрунтованими
висновками.

Форма звіту
1. Тема та мета.
2. Опис завдання згідно розроблюваної студентом системи.

Рекомендована література
1. Братко И. Алгоритмы искусственного интелекта на языке PROLOG. –
М.:2004. – 640 с.
2. Eduardo Costa. Visual Prolog 7.1 for Tyros. Перевод с английского.
http://download.pdc.dk/vip/71/Costas-Tyros_rus_MS.pdf, 122 c.
3. Thomas W. de Boer. A Beginners' Guide to Visual Prolog Version 7.2,
2009. http://download.pdc.dk/vip/72/books/deBoer/VisualPrologBeginners.pdf

2
Теоретичні відомості

СТРУКТУРА ПРОГРАМИ В Visual Prolog

3
4
Наш Турбо-Пролог відповідає просто No.

5
Результат

Пояснення: “літери у верхньому регістрі” – це ВЕЛИКІ ЛІТЕРИ, а “у


нижньому” - це малі літери.

6
Звичайно, при цьому виникає питання: як, наприклад, з оператора

owns(susan,horse).

В резултаті отримуємо висновок "Сюзанна має коня”, а не навпаки?


Насправді машині це абсолютно все одно. Вона лише пам’ятає, кого з них
поставили в переліку аргументів предиката owns() першим, а кого другим.
Програмістам же необхідно домовлятися про це на початку розробки
програми і надалі цю домовленість виконувати, інакше може виникнути
плутанина. (Наприклад, якщо в програмі написано: father(tom,bill). , то хто з
них кому доводиться батьком?)

7
Завдання для самостійної роботи
Завдання 1
Запишіть наступні факти й правила у формі, яка прийнята в мові Prolog

Завдання 2
Побудуйте по тому ж принципу власну базу знань, яка містить факти і
правила типу якщо-то про яких-небудь людей або об’єкти і зробіть із неї
кілька логічних висновків.

Контрольні питання
1. Яку інформацію містить розділ clauses?
2. Як записати в Visual Prolog твердження "Маша вивчає математику"?
3. Як записуються змінні в Visual Prolog?
4. Як перевірити правильність твердження?
5. Як реалізується дедукція в Visual Prolog?

8
Додаток А, Приклад виконання завдання
Текст програми

________________________________________________________________________________

main.pro

/*****************************************************************************

Copyright (c) 2022 Unregistered

******************************************************************************/

implement main
open core

constants
className = "main".
classVersion = "".

class facts
студент: (string, integer).
куратор: (string, integer).

clauses
студент("Семко", 205).
студент("Батченко", 205).
студент("Головко", 201).
студент("Ковалевский", 206).
студент("Радченко", 202).

куратор("Дахно, кафедра КСМ", 201).


куратор("Курочкина, кафедра КСУ", 206).
куратор("Кондратенко, кафедра математики", 205).
куратор("Савченко, кафедра КСМ", 202).

clauses
classInfo(className, classVersion).

clauses
run():-
console::init(),

%run():-
console::init(),
console::clearOutput(),
console::setTextAttribute(3,4),
console::setConsoleTitle("Институт компьютерных технологий"),
console::setTextAttribute(11),
stdio::write("Лабораторная робота №3\nФакультет компьютерных систем\nГруппа 205\nСемко\n"),
stdio::nl,
console::setTextAttribute(7),

9
stdio::write("В какой группе чмслится студент по фамилии: "),
console::setTextAttribute(14),
Фамилия = stdio::readLine(),
студент(Фамилия, Гр),
console::setTextAttribute(7),
stdio::write("Группа - ", Гр),
stdio::nl,
fail;
stdio::write("Кто куратор у студента по фамилии: "),
console::setTextAttribute(14),
Студент = stdio::readLine(),
студент(Студент, Гр),
куратор(Куратор, Гр),
console::setTextAttribute(7),
stdio:: write("Куратор - ", Куратор),
stdio::nl,
fail;
console::setTextAttribute(13),
stdio::write("Для завершения программы нажмите клавишу ENTER ---> "),
_ = stdio::readLine(),
console::setTextAttribute(9),
stdio::write("Программа закончена ---> "),
programControl::sleep(2000).

%succeed(). % place your own code here


end implement main

goal
mainExe::run(main::run).
________________________________________________________________________________

main.ph

/*****************************************************************************

Copyright (c) 2022 Unregistered

******************************************************************************/

#requires @"main.pack"
% publicly used packages
#include @"pfc\core.ph"

% exported interfaces

% exported classes
#include @"main.cl"

________________________________________________________________________________

10
main.pack

/*****************************************************************************

Copyright (c) 2022 Unregistered

******************************************************************************/

#include @"main.ph"

% privately used packages


#include @"pfc\application\Exe\exe.ph"
#include @"pfc\console\console.ph"
#include @"pfc\exception\exception.ph"

% private interfaces

% private classes

% implementations
#include @"main.pro"

________________________________________________________________________________

Main.cl

/*****************************************************************************

Copyright (c) 2022 Unregistered

******************************************************************************/
class main
open core

predicates
classInfo : core::classInfo.
% @short Class information predicate.
% @detail This predicate represents information predicate of this class.
% @end
predicates
run : core::runnable.

end class main

________________________________________________________________________________

Laba_3_c.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>


<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
11
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Laba_3_c"
type="win32"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

________________________________________________________________________________

Результат роботи програми

12
13

You might also like