Інтегроване середовище програмування Turbo Prolog. Робота з простими програмами в системі Turbo Prolog, трасування і діагностика програм

Автор работы: Пользователь скрыл имя, 06 Ноября 2013 в 11:03, лабораторная работа

Краткое описание

Розробка найпростіших програм та їх виконання в середовищі системи Turbo Prolog вимагають початкових відомостей з основних конструкцій мови Prolog і структури Prolog-програм. Будь-яка програма, написана на Turbo Prolog , може складається з шести розділів (рис. 1.1). Такими є: розділ опису констант, розділ опису доменів, розділ бази даних, розділ опису предикатів, розділ опису мети і розділ опису тверджень. Ключові слова: constants, domains, database, predicates, goal і clauses визначають початки відповідних розділів.

Содержание

1. Вивчення основ синтаксису мови Prolog.
2. Отримання навичок роботи в оболонці системи Turbo Prolog 2.0.
3. Знайомство зі структурою Prolog-програм, які використовують зовніш-
ні чи внутрішні цілі.
4. Знайомство з методикою відлагодження і трасування програм.
5. Розробка найпростіших програм з використанням стандартних преди-
катів Turbo Prolog.

Вложенные файлы: 1 файл

ЛАБОРАТОРНА РОБОТА _1_СКС.pdf

— 139.84 Кб (Скачать файл)
Page 1
22
ЛАБОРАТОРНА РОБОТА №1
Тема: Інтегроване середовище програмування Turbo Prolog. Робота з
простими програмами в системі Turbo Prolog, трасування і діагностика
програм
Мета роботи:
1. Вивчення основ синтаксису мови Prolog.
2. Отримання навичок роботи в оболонці системи Turbo Prolog 2.0.
3. Знайомство зі структурою Prolog-програм, які використовують зовніш-
ні чи внутрішні цілі.
4. Знайомство з методикою відлагодження і трасування програм.
5. Розробка найпростіших програм з використанням стандартних преди-
катів Turbo Prolog.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Структура програм Turbo Prolog
Розробка найпростіших програм та їх виконання в середовищі системи
Turbo Prolog вимагають початкових відомостей з основних конструкцій мови
Prolog і структури Prolog-програм.
Будь-яка програма, написана на Turbo Prolog , може складається з шести
розділів (рис. 1.1). Такими є: розділ опису констант, розділ опису доменів, роз-
діл бази даних, розділ опису предикатів, розділ опису мети і розділ опису твер-
джень. Ключові слова: constants, domains, database, predicates, goal і clauses ви-
значають початки відповідних розділів.
Призначення цих розділів:
– розділ constants містить визначення констант, які використовуються в
програмі;
– розділ domains містить визначення доменів, які описують різні класи
об'єктів, що використовуються в програмі;
– розділ database містить твердження бази даних, які є предикатами ди-
намічної бази даних (якщо програма такої бази даних не вимагає, то цей розділ
може бути пропущено);
– розділ predicates служить для опису предикатів, які використовуються в
програмі;
– у розділі goal на мові Turbo Prolog формулюється призначення створю-
ваної програми (складовими частинами при цьому можуть бути підцілі, з яких
формується єдина програма);
– у розділ clauses заносяться факти і правила, відомі апріорі. Про вміст
цього розділу можна говорити як про дані, що необхідні для роботи програми.

Page 2

23
/* --------------------------------------------------------------------------*/
/*
Коментарі
*/
/* --------------------------------------------------------------------------*/
constants
< опис констант >
domains
< опис доменів >
database
< опис предикатів динамічної бази даних>
predicates
< опис предикатів статичної бази даних >
goal
< мета програми >
clauses
<база даних програми: факти, правила>
/* --------------------------------------------------------------------------*/
/*
Коментарі
*/
/* --------------------------------------------------------------------------*/
% коментар
% коментар
Рисунок 1.1 – Структура програми Turbo Prolog
Більшість програм не містять всіх шести розділів. Якщо в програмі опи-
сані тільки дві секції – predicates і clauses, то передбачається, що мета (або ці-
лі), що вирішуються програмою будуть формулюватися в інтерактивному ре-
жимі роботи всередині системи програмування.
Побудова програм, які не залежать від середовища виконання, вимагає
включення в їх структуру ще однієї секції goal, що забезпечує опис мети, що
розв'язується програмою. При цьому мета формулюється у виді запиту до про-
грами, який представляє собою кон'юнкцію підцілей. Для вирішення будь-якої
складної мети Prolog повинен вирішити всі його підцілі, створивши при цьому
необхідну безліч пов'язаних змінних. Якщо ж одна з підцілей помилкова, Prolog
повернеться назад і перегляне всі можливі альтернативні рішення попередніх
підцілей, а потім знову піде вперед, але з іншими значеннями змінних. Такий
процес називається "пошуком з поверненням".
Turbo Prolog забезпечує можливість включення в програму коментарів,
які позначаються символами /* . */, або для рядка – %. Коментарі можна роз-
міщувати в будь-якому місці програми, причому на їх довжину практично не-
має обмежень. Для того, щоб служити своєму призначенню, коментарі повинні
містити інформацію про саму програму, ім'я програмного файлу, компілятор,
базу даних, а також про призначення кожного з предикатів і правил, які не є до-
статньою мірою очевидними.

Page 3

24
Об'єкти даних
На рис. 1.2 приведена класифікація об'єктів даних Prolog.
Рисунок 1.2 – Об'єкти даних Prolog
Prolog-система розпізнає об'єкт по його синтаксичній формі в тексті про-
грами. Це можливо завдяки тому, що синтаксис Prolog має різні форми запису
для різних типів об'єктів даних. Таким чином, можна відрізнити атоми від змін-
них.
Змінні – це ланцюжки, що складаються з цифр, літер і символів підкрес-
лення. Вони починаються з прописної літери або з символу підкреслення: (X, Y,
Anna, Z_25, _x23). Якщо змінна зустрічається в реченні тільки один раз, то не-
має необхідності присвоювати їй ім'я. Можна використовувати так звану ано-
німну змінну, яка записується у вигляді одного символу підкреслення. Ця змін-
на використовується тоді, коли немає необхідності знати значення об'єкту. Ко-
жного разу, коли в реченні з'являється одиночний символ підкреслення, він по-
значає нову анонімну змінну. Якщо анонімна змінна зустрічається в питанні, то
її значення не виводиться при відповіді системи на це питання.
Область дії змінної (лексичний діапазон імені) – одне речення. Це озна-
чає, наприклад, якщо ім'я змінної Х15 зустрічається в двох реченнях, то воно
позначає дві різні змінні. Проте всередині одного речення кожна поява позна-
чає одну і ту ж змінну.
Для констант ситуація інша: один і той же атом позначає один і той же
об'єкт в будь-якому реченні, інакше кажучи, – у всій програмі.
Атоми (константи) можна створювати трьома способами:
1) ланцюжок з букв, цифр і символу підкреслення, починають такий лан-
цюжок з маленької літери: (x, у, anna, z_25);
2) спеціальні символи: (------->; =====; :::=; + - * / < > = : . & _
). Користуючись атомами такої форми, потрібно дотримуватись обережності,
Об'єкти даних
прості об'єкти
структури
константи
змінні
атоми
числа

Page 4

25
оскільки ланцюжки спеціальних символів мають в Prolog заздалегідь визначене
значення.
3) ланцюжки символів, розташовані в одинарних або подвійних лапках.
Це зручно, якщо необхідно, наприклад, мати атом, який починається з пропис-
ної літери. Беручи його в лапки, він стає відмінним від змінної: (’#’; ’b’; ’&’;
“Том”; “Південна_Америка”).
Для того, щоб Prolog-система розпізнала об'єкт, їй не потрібно повідом-
ляти ніякої додаткової інформації.
Числа в Prolog бувають цілими і дійсними. Синтаксис цілих чисел прос-
тий, як це видно із наступних прикладів: 1, 1313, 0, -97. Не всі цілі числа мо-
жуть бути представлені в машині, тому діапазон цілих чисел обмежений інтер-
валом між деякими мінімальним і максимальним числами, що визначені конк-
ретною реалізацією Prolog. Зазвичай, реалізація допускає діапазон від -16 383
до 16 383, а часто, і значно ширший.
Синтаксис дійсних чисел залежить від реалізації. При звичайному про-
грамуванні на Prolog дійсні числа використовуються рідко. Причина цього при-
хована в тому, що Prolog – це мова, яка призначена, насамперед, для обробки
символьної, а не числової інформації.
Стандартні типи доменів
Стандартними типами доменів називаються ті типи, які спочатку були ви-
значені в Turbo Prolog (таблиця 1.1).
Таблиця 1.1
Опис доменів
Тип даних
Ключове
слово
Діапазон значень
Приклади використання
Символи
Char
Всі можливі символи
’а’, ’в’, ’8’, ’\’ ’%’
Цілі числа
Integer
От –32768 до 32767
-5, 63, 84, -2345
Дійсні числа Real
От 1Е–307 до 1Е+308
-42759, 360, 1.25Е23, 5Е-
29
Рядки
String
Послідовність симво-
лів (до 250)
“today”
Символічні
імена
Symbol
1) , цифри і _
2) символи в лапках
Z57, school_day
“читай книгу”
Файли
File
Допустиме в DOS ім'я
файлу
mail.txt, BIRDS.DBA
Арифметичні і логічні предикати
В арифметичних операціях можуть брати участь операнди (числа і змін-
ні), арифметичні операції + (додавання), - (віднімання), * (множення), / (ділен-
ня), mod (ділення за модулем), div (цілочисельне ділення), дужки.
Пріоритет виконання операцій представлено числами в таблиці 1.2.

Page 5

26
Таблиця 1.2
Пріоритет виконання арифметичних операцій
+, –
1
*, /
2
div, mod
3
Стандартні арифметичні функції наведено в таблиці 1.3.
Таблиця 1.3
Стандартні арифметичні функції
sin(Х)
синус, кут в радіанах
cos(Х)
косинус, кут в радіанах
tan(Х)
тангенс, кут в радіанах
arctan(Х)
арктангенс
ln(Х)
логарифм натуральний
log(Х)
логарифм десятковий
abs(X)
модуль аргументу
exp(Х)
експонента
sqrt(Х)
корінь квадратний
Формули перетворення для деяких арифметичних функцій – таблиця 1.4.
Таблиця 1.4
Формули перетворення
Звичайний вид
Turbo Prolog
x
cos
x
sin
tgx=
( ) ( )
x
cos
/
x
sin
x
sin
x
cos
ctgx=
( )
( )
x
sin
/
x
cos
b
ln
a
ln
a
log
b
=
( ) ( )
b
ln
/
a
ln
10
10
ln
x
ln
x
log
=
( ) ( )
10
ln
/
x
ln
a
ln
b
a
ln
b
e
e
a
b
=
=
( )
(
)
a
ln
*b
exp
n
n
x
x
1
=
( )
(
)
x
ln
*n
/
exp 1
2
1 x
x
arctg
x
arcsin

=
(
)
(
)
x
*x
sqrt
/x
arctan
1
x
x
arctg
x
arccos
2
1
=
(
)
(
)
x/
x*
x
sqrt
arctan
1

Page 6

27
Логічні операції в Prolog представлені наступними операторами (табли-
ця 1.5).
Таблиця 1.5
Логічні оператори
>
Більше
<
Менше
=
Дорівнює
>=
Більше або дорівнює
<=
Менше або дорівнює
< >
Не дорівнює
ЗМІСТ РОБОТИ
1. Завантажте систему програмування Turbo Prolog. Далі, користуючись
відомостями, викладеними в теоретичній частині, а також у частині 1 даних ме-
тодичних вказівок:

ознайомтеся з опціями головного меню і вивчіть їх призначення;

виконавши команду F10/Edit, увійдіть в редактор і, натиснувши
клавішу F1, вивчіть зміст пунктів меню Show help file, Cursor movement,
Insert&Delete, Block Functions, Wordstar like, Miscellanieous, Global Functions,
Hot keys;

вивчіть зміст рядка статусу, зміст вікон екрану середовища (Editor,
Dialog, Message, Trace);

встановіть режим компіляції в пам'ять комп'ютера;

сконфігуруйте розміри і палітри кольорів усіх вікон;

визначте шляхи доступу до файлів, встановивши потрібні каталоги;

запишіть виконані установки у файл конфігурації.
2. Увійдіть в режим редагування системи Turbo Prolog, скориставшись
командою F10/Edit головного меню, і введіть приклад 1. Закінчивши введення,
вийдіть з редактора в головне меню системи, натиснувши клавішу "Esc".
Приклад 1
Перша програма має на меті дати необхідні навички у використанні меню
системи і основних команд редактора.
Перейдіть до команди головного меню Edit і натисніть клавішу Enter (або
просто введіть латинську літеру E). По цій команді викликається вбудований в
систему текстовий редактор. При цьому в лівому верхньому куті вікна Editor
з'явиться мерехтлива риска – курсор редактора. Тепер редактор Turbo Prolog го-
товий прийняти текст з клавіатури. З його допомогою можна вводити і редагу-
вати текст програми. Якщо заздалегідь не було задано ім'я файлу Prolog-
програми, то за умовчанням приймається ім'я WORK.PRO.
Набиріть текст програми LR1_1.PRO:
predicates

Page 7

28
hello
goal
hello.
clauses
hello:-
write("Welcome to Turbo Prolog!"), nl.
Вирівнювання рядків в Turbo Prolog, так само як і в інших мовах, перес-
лідує мету надання програмі більшої наочності і не впливає на її виконання.
Методи роботи з цим редактором такі ж, як і із звичайним текстовим ре-
дактором, а набір його команд близький до стандартного набору команд для
будь-яких Turbo-систем. Перелік основних команд і комбінацій клавіш для ви-
клику цих команд можна отримати, натиснувши клавішу F1.
Для того, щоб запустити першу програму на Turbo Prolog на виконання,
спочатку необхідно залишити редактор системи Editor, а для цього необхідно
натиснути клавішу Esc. Курсор редактора при цьому зникне, а курсор головно-
го меню стане вказувати на команду Edit. Задайте тепер команду Run і простеж-
те за двома рядками, що з'явилися під час трансляції програми, у вікні повідом-
лень Message і за результатом роботи програми у вікні діалогу Dialog.
Перший рядок у вікні повідомлень вказує на те, що почалася трансляція
програми LR1_1.PRO. Трансляція задається автоматично при активізації ко-
манди Run, тобто немає необхідності удаватися до допомоги спеціальної ко-
манди Compile.
Команда Run використовується для виконання програми, яка відкомпі-
льована і знаходиться в пам'яті. При цьому можливі дві ситуації.
Якщо мета міститься усередині програми (тобто програма містить секцію
goal), то після виконання команди Run результат роботи програми виводиться у
вікні Dialog. Натиснення клавіші <пробіл> забезпечить повернення в головне
меню системи.
Якщо секція goal в програмі відсутня, то після виконання команди Run
активізується вікно Dialog і користувач сам вводить мету або набір цілей, спіл-
куючись з програмою в інтерактивному режимі через вікно Dialog.
Turbo Prolog дозволяє адресувати результат трансляції або на диск, або в
оперативну пам'ять. При запуску команди Run програма транслюється в опера-
тивну пам'ять. Turbo Prolog транслює таку малу програму дуже і дуже швидко,
за якісь частки секунди. Другий рядок у вікні повідомлень сигналізує про тран-
сляцію предиката hello.
* Вправа
Запустите на виконання програму LR1_1.PRO декілька разів і попракти-
куйте переходити від однієї команди до іншої, поки не відчуєте себе в цій спра-
ві досить упевнено.
При закінченні сеансу роботи з Turbo Prolog, якщо в робочий файл були
внесені хоч якісь зміни, система запитає, чи треба записувати на диск новий
виправлений варіант файлу. Якщо команда Quit була задана випадково, її мо-
жна відмінити за допомогою Esc.

Page 8

29
* Вправа
Увійдіть в редактор Turbo Prolog. Завантажите програму під ім'ям
LR1_1.pro і додайте в неї рядок:
nl, write("Have a nice day.")
услід за рядком:
write("Welcome to Turbo Prolog!")
Запустіть на виконання змінений варіант програми.
3. Виконайте приклад 2.
Приклад 2
Виконавши команду F10/Edit, необхідно увійти в редактор і набрати
текст наступної Prolog-програми:
domains
% секція доменів
arg, zna=real
predicates
% секція предикатів
func(arg, zna)
goal
% внутрішня мета
write("Введіть х= "),
readreal(X),
func(X, Y),
write("при х=", X," y=", Y).
clauses
% секція речень
func(X, Y):-
Y=exp(-X)*sin(X)/X.
Відповідно до варіанта записати арифметичний вираз, наведений у таб-
лиці 1.6.
Таблиця 1.6
Варіанти арифметичних виразів
1
831
4
2
,
y
t
cos
y
t
Z
+
+
=
2
y
sin
,
n
,
y
D
8
4
5
0
2
+
+
=
3
3
6
2
d
x
k
sin
p
,
k
Q

+
=
4
( )
y
cos
d
,
d
ln
F
2
1
5
3
2
+
+
=
5
(
)
( )
y
t
ln
,
t
sin
R
+
+
+
=
3
0
1
2
2
6
t
c
t
c
cos
L
+
+
+
=
4
3
2
2
7
(
)
2
4
355
2
k
,
e
y
y
k
ln
U
y
+
+

=
8
(
)
y
e
h
h
y
sin
A
h
+
+
+
=
2
2
9
( )
d
ln
e
d
,
y
sin
R
y
+
+
=
3
0
2
10
(
)
y
,
y
ln
w
w
,
G
+
+
+
=
5
3
33
9
3
11
h
,
y
ln
h,
e
P
,
y
04
0
1
7
3
5
2
+
+
=
+
12
(
)
y
e
,
k
ln
U
y
k
+
+
=
+
3
4
2

Page 9

30
13
(
)
y
e
y
a
ln
t
,
a
,
D
+
+
+
=
2
52
3
8
7
2
14
(
)
(
)
j
y
ln
y
,
sin
F
2
1
354
0
2
+
+
=
15
( )
(
)
u
y
ln
u
sin
T
+
=
2
2
16
( )
3
2
81
0
i
y
ln
i
cos
,
L
+
=
17
( )
r
sin
,
e
r
ln
t
W
r
y
2
7
4
3
+
+
=
+
18
( )
(
)
f
y
,
ln
f
sin
e
G
y
+
+
=
8
3
2
19
6
3
2
355
0
8
2
2
,
y
cos
,
m
,
m
N
+
+
+
=
20
n
cos
n,
y
y
,
y
H
+
+

=
2
2
1
23
8
0
21
(
)
p
,
y
,
p
sin
Z
325
7
4
0
2
2
+
+
=
22
( )
5
1
0
4
1
37
2
2
+

+
=
y,
y
t
sin
,
T
23
(
)
2
2
3
835
6
y
k
y
ln
,
y
sin
R
+
+
+
=
24
2
2
004
0
y
y
e
e
v
,
W
+
=
25
(
)
(
)
75
0
2
3
,
y
ln
w
y
V
+
+
=
26
(
)
4
5
0
3
2
7
0
2
+
+
+
=
y
,
y
q
y
,
ln
E
27
y
,
e
,
h
,
T
h
y
7
2
355
4
355
0
2
+

=
+
28
( )
351
4
2
2
351
4
3
,
y
cos
t
ln
t
y
,
S
+
+
=
29
( )
l
e
y
ln
,
l
t
K
2
2
2
7
3
2
+
+
+
=
30
(
)
p
e
y
p
ln
y
y
N
+
+
+
+
=
1
3
2
Виконавши команду F10/File/Write to, необхідно зберегти файл в особис-
тій директорії на мережевому диску під ім'ям LR1_2.pro.
Познайомитися з тим, як Prolog-система здійснює пошук відповідей на
запити, а також відстежити послідовність узгодження фактів і правил Prolog-
програми можна, використовуючи покроковий режим її виконання. Для пере-
ходу в режим покрокового виконання програми (трасування) необхідно в про-
грамі використовувати директиву trace.
Вставте першим рядком програми директиву trace, яка при виконанні
програми забезпечить трасування всіх предикатів. Запустіть програму на вико-
нання і задайте один з раніше виконувалися запитів.
Здійсніть, з використанням клавіші F10, покрокове виконання програми,
старанно відстежуючи всі переміщення курсору у вікні редагування Editor і ре-
єструючи усі повідомлення, що виводиться у вікні трасування Trace.
Розберіться в послідовності доказу мети Prolog-системою. Для цього за-
писати всі повідомлення режиму трасування і дати їм докладне тлумачення в
звіті з лабораторної роботи.
Також вводячи перед секцією domains директиву компілятора diagnostics,
виконати діагностику програми Lr1_2.pro.
Необхідно записати усі повідомлення режиму трасування і результати
виконання директив, а також дати їм детальне тлумачення в звіті по лаборатор-
ній роботі.
4. Виконайте приклад 3.
Приклад 3
У вікні редактора введіть наступну програму:
predicates

Page 10

31
hello
goal
hello.
clauses
hello:-
makewindow(1, 7, 7,"My first program", 4, 56, 10, 22),
nl, write("What is your name?"),
cursor(4, 5),
readln(Name), nl,
write("Welcome ", Name).
У цій програмі використані наступні вбудовані предикати Turbo Prolog:
makewindow(1, 7, 7, "My first program", 4, 56, 10, 22) – предикат створен-
ня вікна (де: 1 – номер вікна; 7 – колір тексту у вікні (7 – сірий); 7 – колір рамки
вікна; "My first program" – назва вікна; 4, 56 – координати верхнього лівого кута
вікна. Діапазон координат залежить від дозволу екрану, який задається в пункті
меню Setup|Miscellaneous|Screen Mode, причому перша цифра – це положення
по вертикалі (координата У), а друга – по горизонталі (координата Х) – відпові-
дно – номер рядка і стовпця; 10, 22 – число рядків і стовпців вікна (висота і ши-
рина));
nl – предикат, який викликає перехід на новий рядок;
cursor(4, 5) – предикат, який переміщує курсор в позицію вікна з коор-
динатами (4, 5): 4 – координата у (вниз), 5 – координата х (вправо) (якщо в яко-
сті аргументів вказані не значення, а змінні, які не пов'язані раніше з якими-
небудь значеннями (вільні змінні), то цей предикат привласнює змінним відпо-
відно значення поточних координат курсору);
readln(S) – предикат, який зчитує символьний рядок;
write(X1, Х2, ..., ХN) – предикат виведення даних.
Для виходу з редактора натисніть Esc.
Щоб відтранслювати і виконати програму, оберіть пункт меню Run.
На вимогу програми введіть Ваше ім'я і натисніть Enter.
ЗМІСТ ЗВІТУ
Звіт по лабораторній роботі повинен містити:
1. Тему роботи.
2. Мету роботи.
3. Результати досліджень по пунктам 1-4.
4. Протоколи трасування і діагностики програми і пояснення до них (з
прикладу 2).
5. Тексти програм LAB1_1.PRO, LAB1_2.PRO, LAB1_3.PRO.
6. Висновки по роботі.

Информация о работе Інтегроване середовище програмування Turbo Prolog. Робота з простими програмами в системі Turbo Prolog, трасування і діагностика програм