- •2.1. Теоретичні відомості 24
- •Передмова
- •1. Арифметика та порівняння
- •1.1. Теоретичні відомості
- •1.1.1. Арифметичний вираз
- •1.1.2. Типи операндів і результатів арифметичних операцій
- •1.1.3. Властивості операцій
- •1.1.4. Стандартні функції і предикати
- •1.1.5. Бінарні предикати
- •1.1.6. Операції порівняння
- •1.1.7. Приклади програм на Пролозі
- •1.2. Методичні вказівки до виконання самостійної роботи
- •1.4. Контрольні питання
- •1.5. Література
- •1.6. Індивідуальні завдання
- •2. Об’єкти даних складеної структури
- •2.1. Теоретичні відомості
- •2.1.1. Загальні відомості про об’єкти складеної структури
- •2.1.2. Відмінність об’єкту складеної структури від предикату
- •2.1.3. Увід - вивід об’єктів складеної структури
- •2.1.4. Робота з об’єктами складеної структурами
- •2.1.5. Призначення об’єктів складеної структури
- •2.1.6. Оголошення складених доменів
- •2.1.7. Об’єкти багаторівневих складених структур
- •2.1.8. Робота з об’єктами багаторівневих складених структур Побудова об’єктів багаторівневих складених структур
- •Одержування компонент об’єкту складеної багаторівневої структури
- •3. Рекурсивні структури даних. Дерева як типи даних
- •3.1. Теоретичні відомості
- •3.1.1. Рекурсивні дерева
- •3.1.2.Увід - вивід дерева
- •3.1.3. Обхід рекурсивного дерева
- •3.1.4. Створення дерева
- •3.1.5. Сортування рекурсивних дерев
- •3.2. Методичні вказівки до виконання самостійної роботи
- •3.4. Контрольні питання
- •3.5. Література
- •3.6. Індивідуальні завдання
- •Література
2.1.6. Оголошення складених доменів
Об’єкт можна описувати з різних аспектів. Тому опис об’єкту може складатися з властивостей різних типів. Наприклад, нехай суб’єкт має наступні властивості: роботу, місце проживання, хист. Кожну властивість суб’єкту можна описувати доменом простим чи складеним.
domains
rb = rab (sub, prof, stag, posada) /* суб’єкт, професія, стаж роботи, посада */
msc = misce (sub, adr) /* суб’єкт, адреса */
adr = address(misto, vul, dim, kvart) /* місто, вулиця, дім, квартира */
xst = xust (sub, x) /* суб’єкт, хист */
sub, prof, posada, misto, vul, x = string
stag, dim, kvart = integer
При такому описі структур для кожного типу властивостей суб’єкту треба вводити в предикат новий аргумент.
Predicates
obj (rb, msc, xst)
Пролог дозволяє оголошувати складений домен, який дозволяє для опису об’єкту використовувати тільки один аргумент, який описує ту чи іншу властивість.
Domaіns
vlast = rab (sub, prof, stag, posada);
misce (sub, adr);
xst = xust (sub, x)
adr = address(misto, vul, dim, kvart)
sub, prof, posada, misto, vul, x = string
stag, dim, kvart = integer
Predicates
Obj(vlast)
Крапка з комою читається як "або".
Складений домен дозволяє записувати будь-який тип властивостей з перелічених на місці одного аргументу.
Розглянемо приклад програми, яка записує в динамічну базу даних властивості об’єктів.
Приклад1.
domaіns
vlast = rab (sub, prof, stag, posada);
misce (sub, adr);
xst = xust (sub, x)
adr = address(misto, vul, dim, kvart)
sub, prof, posada, misto, vul, x = string
stag, dim, kvart = integer
Facts
Obj(vlast)
Predicates
obj(vlast)
do(X)
Goal
Readterm(vlast, X), do(X).
Clauses
do(X):- assertz(obj(X)).
Вводяться і заносяться у внутрішню базу даних:
Obj (rub (“Кузьменко”, “програміст”, 3, “ст. інженер”))
Obj (misce (“Кузьменко”, address (“Шкільна”, “2” , “127”)))
Obj (xust (“Кузьменко”, “графіка”))
Застосовуючи складений домен, до визначення об’єкту легко можна додати інші властивості, додавши новий тип властивостей в секції Domains до типу Vlast.
Останній приклад програми показує, що одним аргументом можна визначати різну кількість компонент структур.
За допомогою структур, можна також задавати один аргумент предикату для різних типів даних.
Приклад2.
Ввести одним предикатом вводу дані різних типів, сформувати внутрішню базу даних і зберегти її у файлі.
Domains
n=i(integer);
r(real);
s(string)
database
fact(n)
Predicates
do
repeat
Goal
Do,save("ST.asc").
Clauses
repeat.
repeat:-repeat.
Do:-repeat, readterm(n,T), assertz(fact(T)), nl, write("Закончить?(y/n)"),
readchar(C), nl, C='y'.
2.1.7. Об’єкти багаторівневих складених структур
Visual Prolog дозволяє конструювати структури о декількох рівнях. Тобто компоненти структури можуть самі бути структурами.
Розглянемо приклад: Побудувати структуру речення „На столі стояла ваза” за частинами мови.
Структуру речення за частинами мови називають деревом граматичного розбору. Її компонентами є групи іменника і групи дієслова. В свою чергу групи іменника можуть складатися з іменника, прийменника, тощо. А група дієслова складається з дієслова і групи іменника. Наприклад для вище вказаного речення дерево граматичного розбору буде:
1
рівень
2
рівень
3 рівень
4 рівень
Рис.1 Дерево граматичного розбору
В дереві на Рис.1 показано функтори(імена структур) і значення аргументів внутрішніх структур(слова).
Опис багаторівневих структур виконується по рівням. Для вказаної структури опис буде:
domains
struktura_r = dgr ( gr_im, gr_di) % 1 рівень
gr_im = grupa_imennuka1 (pr, im); % 2 рівень
grupa_imennuka2 (im) % 3 рівень
gr_di = grupa_dieslova (di, gr_im) % 2 рівень
pr = prujmennuk(string) % 3 рівень
im = imennuk(string) % 4 рівень
di = dieslovo(string) % 3 рівень
В програмі для речення „На столі стояла ваза” структура, що описана буде мати вигляд:
DGR = dgr(grupa_imennuka1(prujmennuk(“На”),
imennuk(“столі”)),
grupa_dieslova (dieslovo(“стояла”),
grupa_imennuka2(imennuk(“ваза”))))
Структура не може мати однакові функтори, тому групи іменників мають № : grupa_imennuka1, grupa_imennuka2.
