Агрегати
фактів h2>
1. Списки. H2>
Якщо в пр-ме
необхідно організувати зі змінними або заздалегідь невизначеною кількістю
об'єктів, то викон. списки. p>
СПИСОК --
впорядкована послідовність ел-в одного типу невизначеної довжини, кіт м.
складатися з 0 і більше ел-в. p>
Константи
, що потрапили в список, записуються в [] і відокремлюються один від одного комами. p>
Виходячи з
визначення списку, два списки, сост. з одних і тих же p>
ел-в, але
розташованих в різному порядку вважаються різними. У розділі domains ел-ти
списку зобов але д.б.н. зіставлені з певним типом домену (Sp = integer *). p>
Список в
domains м.б. опосередкований через ім'я змінної, ел-ти кіт. збираються в
список. p>
domains p>
k_fms =
string, kol = integer, p>
Sp = kol * p>
predicates p>
fms (k_fms,
kd, ...) p>
Списки складаються
із заголовка (початку списку) і захоплення (закінчення списку). До заголовку
стосується лише 1-й ел-т списку, решта - хвіст. p>
Список з
нульовим кількістю ел-в визначається як порожній список, він не має ні
заголовка ні хвоста. p>
Для
з роботи
списками в мові є ряд вбудованих предикатів. p>
MEMO (,) - де м.б. заданий або ім'ям Sp, або
безпосередньо константами, що входять до цього списку. p>
Предикат
визначає приналежність ел-та до списку. p>
I - поділ
списку на голову і хвіст [Head I Tail] або [HIT] p>
H - або
змінної для позначення заголовка p>
T - - "--
хвоста p>
ПРИКЛАД p>
domains p>
list = char * p>
predicates p>
test (List) p>
clouses p>
test ([ 'A',
'B', 'C', 'D']). P>
goal p>
test ([H/T ]), p>
nl, p>
write (H) p>
APPEND ([
ел-ти старого списку], [ел-ти нового списку], <ім'я нового списку>) p>
- з 2-х
списків, старого і нового, створюють III список. p>
REVERS ([
ел-ти стар. списку], <ім'я нового списку>) p>
- міняє
послідовність ел-в на протилежну p>
FINDALL (<
ім'я змінної "," формат предиката>, <назва списку>) p>
ПРИКЛАД p>
domains p>
post = string p>
Kol, Cena, Sum
= Integer p>
Sp = integer *
(Sp = Kol *) p>
Kod = string p>
predicates p>
tmc (P, Kol,
Cena) p>
sum (Sp, Sum) p>
goal p>
write ( "Введіть код "), p>
readln (Kod), p>
nl, p>
findall (Kol,
tmc (Pos1, Kod, Kol, Cena), Sp), p>
sum (Sp, Sum), p>
write ( "Кількість =", Sum) p>
clauses p>
tmc ( "001",
"001", 45, 80) p>
. p>
. p>
. p>
sum ([], 0). p>
sum ([H/T],
Sum) if p>
sum (T, Sum1). p>
Sum = H + Sum1. p>
У мові є
можливість роботи з динамічною базою фактів, в якій м. об'єднуватися як
однорідні, так і різнорідні предикати-фактори. p>
База фактів --
щось середнє м-у реляційної СУБД і масивом. У момент активізації всі факти
бази переносяться в ОЗУ з зовнішнього зап. пристрою. Для роботи з БД створюється
новий розділ програми, в кот. визначаються прототипи предикатів-фактів,
Об'єднаних до бази. p>
Database p>
прототипи в
цьому розділі описуються за тими ж правилами, що і в predicates. p>
Розділ database
записується перед розділом predicates і предикати, кот. в ньому описувати не
можуть описуватися у роздiлi predicates, а іс-ся в розділах clouses і goal.
Активізація бази відбувається в області ОЗУ, кот. за замовчуванням має тип домену
dbasedom. Цей тип програміст не вказує явно в програмі у розділі domains,
але м. його використовувати в якості аргументів вбудованих предикатів мови, що
дозволяє скоротити текст програми при роботі з базою. p>
domains p>
dbasedom =
tms (Post, Kod, Kol, Cena) p>
. p>
. p>
. p>
database p>
. p>
. p>
tmc (Post, Kod, Kol, Cena) p>
Можливо
доповнення бази новими фактами, видалення застарілих, коректування окремих
фактів. Всі операції в базі фактів проводяться за допомогою стандартних
вбудованих предикатів: p>
asserta p>
(<факт>) (dbasedom)
: (I) p>
assertz p>
- використовується
для додавання нового факту в базу. Факт д.б.н. обов'язково визначений і відноситься
до області dbasedom. При використанні предиката asserta факт додається перед
іншими фактами наявного предиката. p>
assertz --
додавання після - "- p>
retraсt (<
факт>) (dbasedom): (i) - видалення з БД перший факт, кот. зіставляється
з вказаним в retraсt фактом. Можливо видалення групи. При цьому у факті
зазначається загальна для видалення фактів значення, а на місці всіх інших
змінних записуються ті змінні, кот. немає в цьому предикат. p>
SAVE (<ім'я
файлу>) - скорочує всі факти дин. бази з ОЗУ на магн. диск під ім'ям p>
string: (i)
заданим в предикат save/ p>
CONSULT (<
назва файлу>) - додає в опер. дин. базу всі факти з файлу на диску з p>
string: (i) вказаним ім'ям. p>
p>
2. Прийоми
роботи з динамічною базою фактів. h2>
1.Перезапісь
фактів з розділу clouses в базу на МД. p>
domains p>
Post, Kod =
string p>
Kol, Cena =
integer p>
database p>
tmc (Post,
Kod, Kol, Cena) p>
predicates p>
perezap p>
dauses p>
tmc ( "001",
"001", 45,80). P>
. p>
. p>
. p>
perzap if p>
save ( "data") p>
gocel p>
perezap. p>
2. Створення
бази в процесі діалогу p>
domains p>
Post, Kod =
string p>
Kol, Cena =
integer p>
Pc = integer & & ознака закінчення введення p>
database p>
tmc (Post,
Kod, Kol, Cena) & & база створюється спочатку p>
predicates p>
vvod p>
clouses p>
vvod if p>
write ( "Введіть код постачальника "), p>
nl, p>
readln (post), p>
nl, p>
write
( "Введіть код ТМЦ "), p>
nl, p>
readln (Kod), p>
nl, write
( "Введіть кількість ТМЦ "), p>
nl, p>
readint (Kol), p>
write ( "Введіть ціну "), p>
nl, p>
readint (Cena), p>
assertz (tmc (Post, Kod, Kol, Cena )), p>
write ( "Введіть ознака продовження s/0 "), p>
pr = 0, p>
vvod. p>
goal p>
vvod, p>
save ( "data") p>
3.Дополненіе
бази новими фактами p>
. p>
. p>
. p>
goal p>
consult ( "data "), p>
vvod, p>
save ( "data'). p>
4.Актівізація
фактів з файлу на диск p>
domaines p>
Post, Kod =
string p>
Kol, Cena =
integer p>
Sum, Sum1 =
integer p>
Sp = kol * p>
database p>
tmc (Post,
Kod, Kol, Cena) p>
predicates p>
sum (Sp, Sum) p>
clouses p>
sum ([], 0). p>
sum ([H/t],
Sum) if p>
sum (T, Sum1), p>
Sum = H + Sum1. p>
goal p>
consult
( "Data "), p>
write ( "Введіть код ТМЦ "), p>
nl, p>
readln (Kod), p>
sum (Sp, Sum), p>
write (Sum). p>
5.Удаленіе
конкретних фактів з БД p>
domains p>
Post, Kod =
string p>
Kol, Cena =
integer p>
database p>
tmc (Post,
Kod, Kol, Cena) p>
predicates p>
udal p>
clouses p>
udal if p>
write ( "Вкажіть код постачальника "), p>
nl, p>
readln (Post), p>
write ( "Вкажіть код ТМЦ "), p>
nl, p>
readln (Kod), p>
retract (tmc
(Post, Kod, Kol, Cena )), p>
goal p>
consult
(data), p>
udal, p>
save ( "data'). p>
6.Удаленіе
групи факторів p>
dauses p>
udal if p>
write ( "Введіть код постачальника "), p>
nl, p>
readln (post), p>
retract (tmc
(Post, Kod, Kol, Cena )), p>
. p>
. p>
. p>
За допомогою
retract проводиться видалення дин. бази фактів з ОЗУ. p>
Коригування
вмісту факту. p>
Операції
проіхзводятся в 2-а етапи: p>
1 - за допомогою
retract здійснення. видалення застарілого факту з бази p>
2 - assertz --
додавання нового факту в базу. p>
3.
Структури. h2>
СТР-РА - набір
об'єктів, логічно пов'язаних між собою в процесі рішення задачі і
об'єднаних під одним ім'ям. Стор-ра в П. використовується при створенні складної
бази фактів і правил. p>
Якщо об'єкти
стр-ри відносяться до одного типу доменів. то стр-ра наз. однодоменной.
Допускається исп-е доменів різного типу, в цьому випадку стр-ра наз.
разнодоменной. p>
Викор-е стр-ри в
програмах дозволяє впорядкувати базу, дозволяється звернення до буд-рам по
імені. p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://www.parny.by.ru/
p>