- •Лабораторне заняття № 1
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 2
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 3
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 4
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 5
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 6
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 7
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 8
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 9
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 10
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 11
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 12
- •1. Теоретичні відомості
- •1. Стара графіка.
- •2. Черепахова графіка (Turtle graphics).
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 13
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 14
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 15
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 16
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •43018, М. Луцьк, вул.Львівська, 75
Лабораторне заняття № 13
Тема: Обробка динамічних баз даних та файлів
Мета роботи. Розглянути на прикладі основні вбудовані предикати обробки баз даних та предикати роботи з файлами; проаналізувати отримані результати.
1. Теоретичні відомості
Існує 4 способи представлення баз даних у системі Turbo Prolog :
1. Представлення у вигляді файлів.
Вважатимемо, що кожен факт є записом деякого цілісного інформаційного елемента, тобто : a) кожен цілісний інформаційний елемент представляється у вигляді факту, на-приклад :
domains
ts = slb (string, integer, symbol, integer)
slb (“Brajen”, 100, operator, 2000).
slb (“Nensi”, 200, programmer, 7100).
slb (“Ralph”, 100, manager, 9100).
Goal: slb (N, 100, P, O).
b) представлення атрибутів (властивостей) у вигляді окремих фактів. Тут один з атрибутів є ключем, тобто ключовим, який у разі необхідності з’єднує факти у єдине ціле. Приклад :
vtd (“Brajen”, 100).
pos (“Brajen”, operator).
okl (“Brajen”, 2000).
slb1 (N, V, P, O) :- vtd (N,V), pos (N, P), okl (N, O).
Даний тип визначає неявну базу даних і є більш гнучким, оскільки нові атрибути можна додавати без переписування вже існуючої БД.
2. Представлення у вигляді списку структур.
Базу даних можна вважати потоком інформаційних елементів. Приклад :
domains
ts = slb (string, integer, symbol, integer)
lists = ts*
…
[slb (“Brajen”,…]
3. Представлення у вигляді лінійних рекурсивних структур.
Структуру (2) можна легко перетворити у дану за допомогою додавання додаткового елементу посилки. Приклад :
domains
ts = slb (string, integer, symbol, integer)
lists = ts*
rstype = rs (string, integer, symbol, integer, rstype); end
…
rs (“Brajen”, 100, operator, 2000, rs (“Nansi”, 200, programmer, 7100, rs (“Ralph”, 100, manager, 9100, end))).
4. Представлення у вигляді двійкового дерева.
Перетворимо структуру rs у двійкове дерево bttype = bt (string, integer, symbol, integer, bttype, bttype); end.
Приклад : ключем буде прізвище.
“Nansi”
/ \
“Brajen” “Ralph”
Таку структуру можна оформити у вигляді :
Bt (“Nansi”, 200, programmer, 7100, bt (“Brajen”, 100, operator, 2000, end, end), bt (“Ralph”, 100, manager, 9100, end, end)).
Прикладом реалізації може бути :
one_element_bt (slb (N, V, P, O), bt (N, V, P, O, _, _)).
one_element_bt (slb (N, V, P, O), bt (_, _, _, _, Pop, Next)) :- one_element_bt (slb (N, V, P, O),Pop).
Для роботи з файлами застосовуються наступні предикати :
Openread (SymbName(file), FileName(string)), openwrite (SymbName(file), FileName (string)), openappend (SymbName(file), FileName(string)), openmodify (SymbName(file), FileName(string)), writedevice (SymbName (symbol(i)), readdevice(symbol(o)), closefile (File-Name(string(i)), deletefile(string), existfile(string), renamefile([NameOld, NameNew](string)), filepos (FileName(file), Pos(real), R(integer)).
2. Практична частина
Приклад 1.
domains
x=integer
database
time1(x)
predicates
change_time
clauses
time1(10).
change_time:-time1(X),New_time=X+1,retract(time1(X)),asserta(time1(New_time)).
goal: change_time
YES
goal: time1(X)
X=11
Приклад2.
domains
person=symbol
lang=symbol
database
know(person,lang)
predicates
language(lang)
start
goal
start.
clauses
language(ukrainian).
language(italian).
language(russian).
language(german).
language(english).
language(japan).
start:-write("Input your name"),read(Name),language(Lan),write("Do you know"),
write(Lan),write("language"),nl,read(Y),Y=yes, asserta(know(Name,Lan)),fail.
goal: know("Bob",X).
X=
Приклад 3.
domains
myfile=file
predicates
start
readin(char)
goal
srart.
clauses
start:-write("This program reads input \n from the keyboard \n writes it to FILE.ONE\n"),
write("Press # when done entering \n"),
openwrite(myfile,"file.one"),readchar(X),readin(X),closefile(myfile),
writedevice(screen), write("Your input has been transferred to a file").
readin("#"):-!.
readin("\13"):-!,writedevice(myfile), write("\13\10"),writedevice(screen),
write("\13\10"),readchar(X),readin(X).
readin(X):-writedevice(myfile),write(X),writedevice(screen),write(X), readchar(Y),readin(Y).
