- •Міністерство освіти і науки, молоді та спорту україни
- •Навчальне видання
- •Опис навчальної програми дисципліни Загальні відомості
- •Розподіл навчального часу
- •Мета і завдання дисципліни
- •Метою викладання дисципліни є формування знань, вмінь і навичок, необхідних для осмисленого вибору з подальшим використанням засобів функціонального та логічного програмування.
- •Після вивчення дисципліни студент повинен знати:
- •Зміст дисципліни
- •Робота кп №1. Вступ до мови програмування Пролог: синтаксис та семантика Пролог-програм
- •Iндивiдуальнi завдання:
- •1.Оголошення спискiв
- •2.Операцiї зi списками
1.Оголошення спискiв
список = домен_елемент*
Це зручний спосiб оголошення спискiв. Домен "список"
оголошується списком елементiв типу "домен_елемент". Домен
"домен_елемент" може належати як до стандартного типу, так i до доменiв, визначенних
програмiстом.
Зiрочка у кiнцi формата читається як "список елементiв". Наприклад,
список_цiлих_чисел = integer* оголошує домен типу списка цiлих чисел;
Списки є найбiльш використовуємим типом об'єктiв в мовi ПРОЛОГ. Реалiзовуються списки задопомогою структур спецiального виду, таким чином списки являються одним iз рiзновидiв структур. Список складається iз впорядкованної послiдовностi термiв, роздiленних комами. Увесь список
розмiщується у квадратних дужках. Список цiлих чисел може мати наступний вигляд:
[52,1,3,5,4,7,6,1,4,2]
Такий список належить до доменiв, визначених програмiстом, наприклад, так:
domains
список_цiлих_чисел = integer*
Список можна подати у виглядi структури, що має двi компоненти: заголовок i залишок. Якщо список складається з одного елементу, тоді залишок — порожнiй список. Належнiсть до списку можно сформулювати таким чином:
— заголовок списку є елементом цього списку;
— об'єкт являється елементом списку, якщо вiн є елементом його залишку.
Формально цi правила можливо подати у виглядi операції [X|Y], в якому список [X|Y] представляє елемент X, за яким знаходиться залишок Y. Знак "|" означає, що Y є списком, що складається з усiх
елементiв, наступних пiсля X в списку довiльної довжини, а не другим елементом списку з двух елементiв. Список може бути також порожнiм. Список може мiстити елементи тiльки одного типу. Якщо необхiдно включити до списку елементи рiзних типiв, то треба визначити структуру, альтернативами до якої будуть об'єкти рiзних типiв. Наприклад, список, що складається з символiв i цiлих чисел, може бути визнначен так:
domains
елемент = с(char); ч(integer)
змiшаний_список = елемент*
При наведенному опису у розділі domains список може виглядати таким чином:
[ч(12),ч(1),ч(-99),с('п'),с('g'),ч(8),с('Ш')]
2.Операцiї зi списками
В мовi ПРОЛОГ явно визначена єдина операцiя для обробки спискiв. Це операцiя "|" для видiления першого елемента списка. Запис [ X | Y ] є списком iз заголовком (першим елементом) Х i залишком Y.Всi iншi операцii реалiзовуються через подану рекурсивним чином .
Наприклад, процедура перевірки належності елемента списку має вигляд:
member(X,[X|_]).
member(X,[_|T]):-member(X,Tail).
Надамо деяку iнформацiю про структури.
Структура ( або складний терм ) є єдиним об'єктом, який складається з набора iнших об'єктiв ( компонентiв ). Iм'я структури має в мовi ПРОЛОГ спецiальну назву «функтор». Компоненти структури роздiляються комами i беруться у круглi дужки. Функтор записується безпосередньо перед лiвою
дужкою. Наприклад, наступна структура має функтор "автор" та три компоненти:
автор (Лев,Толстой,1828)
Структури вiдносяться к доменам, якi визначаються програмiстом. Оголошення домена "автор" може мати наступний вигляд:
domains
автори = автор(iм'я,прiзвище,рiк_народження)
iм'я,прiзвище = symbol
рiк_народження = integer
Оголошення структур:
структура = f1(d11,d12, ... ,d1N); f2(d21,d22,... ,d2N)
Оголошення структури (домена, який складається з об'єктiв, що перекриваються) складається з iменi структури (функтора) i доменiв усiх компонент даної структури, якi використовуються.
Права частина оголошення структури може мiстити опис альтернативних варiантiв, роздiлених службовим словом "or" або знаком ";". Кожна альтернатива повинна мiстити унiкальний функтор i список дiйсно використовуємих доменiв. Наприклад, оголошення
водiй=має(iм'я,автомобiль);документи(iм'я,автомобiль)
визначає для структури водiй двi можливi альтернативи.
В деяких варiантах мова йдеться про двiйково-трiйковий довiдник. Дамо його визначення :
Двiйково-трiйковий довiдник — це двiйково-трiкове дерево (пусте, з однiєї вершини , або таке , що кожна внутрiшня вершина його має двi або три дочiрнi вершини та всi листя дерева розмiщено на одному рiвнi), всi елементи якого зберiгаються в листях та впорядкованi злiва направо. Внутрiшнi вершини мiстять у собi мiтки, що дорiвнюють мiнiмальним елементам тих чи iнших своїх пiддерев, вiдповiдно наступним правилам:
якщо внутрiшня вершина має два пiддерева, то вона мiстить мiнiмальний елемент другого (правого) з них, якщо внутрiшня вершина має три пiддерева, то вона мiстить мiнiмальнi елементи другого(середнього) та третього(правого).
Контрольні запитання
Структури даних Турбо-Прологу.
Поняття “список”. Атрибути списку. Графічне представлення списків.
Метод розділу списку на хвіст і голову.
Операції над списками:
- пошук елемента в списку;
- конкатенація списків;
- поділ списків на задану кількість списків;
- додавання елементів до списку;
- сортировка списку;
- організація підсписку.
5. Представлення множин двійковими деревами.
6. Двійкові довідники: додавання та вилучання елементів.
7. Тип даних «рядки». Стандартні предикати роботи з рядками.
Лiт-ра: [1]: С. 76-97 та С. 192-225; [2]: С. 107-128; [3]: С.331-365 та С. 508-519, [4]: С. 615-639; [5]: С. 153 -187.
РОБОТА КП №4 Пошук в базі даних (БД). Динамічні бази даних
Мета роботи: вивчення засобів управління динамічними БД
та придбання навичок програмування
процедур управління БД у простих логічних програмах
Послідовність виконання
1. Вивчити методичні вказівки.
2. Ознайомитися з умовою задачі, яку треба вирішити.
3. Підготувати текст програми і вихідні дані до тестування програми.
4. Відлагодити програму та перевірити її працеспроможність за допомогою тестових прикладів.
Скласти звіт про роботу.
Зміст звіту
Індивідуальне завдання
Опис програми, вхідних та вихідних параметрів
Опис контрольних прикладів
Листінг коду програми та протокол розв’язку (завдання задачі) проблеми.
Аналіз одержаних результатів.
Вимоги до виконання
Організувати діалог у вигляді меню для опрацювання декількох запитів (до БД також), запит про закінчення роботи і повернення управління ОС або утиліту, через яку відбувався вхід до Пролога або меню Пролога. В кожній з робіт обов’язкова реалізація запитів на оновлення БД, - введення нових фактів (додавання інформації), видалення старих фактів (вилучання інформації); переглядання всієї інформації.
Індивідуальні завдання
Загальна умова для задач 1 – 3:
В БД системи соціальних досліджень містяться дані вигляду
|
Прізвище, ім’я, по батькові |
Вік (роки) |
Стать (жіноча/чоловіча) |
Сімейний стан (самотній, одружений, розлучений, мешкає окремо від сім’ї)
|
Скласти процедуру, що обчислює
1. Відсоток клієнтів віком до 21 року.
2. Відсоток клієнтів віком від 21 року.
3. Відсоток чоловіків (жінок).
4. Відсоток самотніх.
5. Відсоток одружених
6. Відсоток розлучених або проживаючих окремо.
Загальна умова для задач 7-12:
В системі ведення банківських рахунків на підставі чеків БД містить наступні відомості
|
Прізвище, ім’я, по батькові клієнта |
Номер рахунку (5 цифр) |
Поточний стан рахунку (6 цифр)
|
- для виконання операцій поступають на вхід дані: номер рахунку і сума прибутків або витрат. Якщо сповіщаєма сума позитивна, то це вкладення, інакше - це видача по чеку. Скласти процедури за варіантами:
7. Як доповнення до операцій прибутку або витрат реалізувати запит по видачі
номера рахунку або поточного стану рахунку за прізвищем клієнта.
8. Видати номери рахунків клієнтів, у яких стан поточного рахунку не первищує 2-х цифр.
9. При реалізації видачі по чеку з клієнтів утримується збір в розмірі 15 копійок, при цьому з клієнтів, на рахунку яких знаходиться менше ніж 300 грн, чековий збір не стягується.
10. Видати загальний звіт за всіма рахунками.
11. При реалізації видачі по чеку, якщо виявиться, що будь-який чек виписано на суму, що перевищує залишок рахунку, видається відповідне повідомлення і з клієнта утримується 5 грн. за неправомірне виписування чеку.
12. За «прізвищем клієнта» видати інформацію за всіма поточними станами
рахунків клієнтів з однаковими прізвищами, а також їх загальну суму рахунків.
Загальна умова для задач 13 - 17:
В системi нарахування потижневої заробiтної плати БД мiстить наступнi вiдомостi про робiтникiв:
Прiзвище, Iм'я, по-Батьковi
Табельний номер (9 цифр - код)
Число вiдпрацьованних годин
Погодинний тариф (в грн.)
Кiлькiсть утриманцiв
В доповнення до процедур оновлення БД забезпечити:
13) Пiдрахунок середнього числа вiдпрацьованих годин робiтниками пiдприємства;
14) Пiдрахунок середнього погодинного тарифу;
15) При вводi прiзвища або табельного номера визначити заробiтну платню з урахуванням того, що рабочий час бiльший нiж 40 годин в тиждень вважається зверхурочним i оплачується в пiвтора рази бiльше нiж тижнева норма часу;
16) По прiзвищу або табельному номеру визначити зароблену суму грошей з урахуванням 5% податку на соцiальне забезпечення, але не бiльш 15 грн. Iз зароботаної суми i 2% податку, що стягується владою областi на соцiальний розвиток;
17) По прiзвищу або табельному номеру визначити заработану суму грошей з урахуванням податку, що стягується владою району у вiдповiдностi з наступною шкалою:
Кiлькiсть утриманцiв Вiдсоток оподаткування
0 16
1 12
2 9
3 6
бiльше 3 5
Надати звiт про загальне число вiдпрацьованних годин робiтниками пiдприємства i звiт по загальнiй сумi 2% оподаткування, що стягується владою областi iз зароботаної суми грошей;
Загальна умова для задач 18 - 21 наступна:
Фiрма обробної промисловостi купує обладнання, сподiваючись використовувати його на протязi року
для виробництва товарiв легкої промисловостi; в БД системи iнформацiйного забезпечення зберiгаються наступнi данi:
Код обладнання (9 символьних позицiй)
Вартiсть обладнання (тис. Грн.)
Доход вiд реалiзацiї продукцiї (тис. Грн.)
Виробничi витрати (тис грн.)
Вiдомостi по експлуатацiї (не бiльше 60 символьних позицiй)
Як доповнення до процедур оновлення БД реалiзувати по варiантам:
18) Визначити прибуток вiд капiталовкладень шляхом вiднiмання суми всiх витрат iз суми доходiв для заданого вироба;
19) Визначити середнiй прибуток вiд капiталовкладень по всiм виробам;
20) Визначити коефiцiєнт окупностi витрат шляхом дiлення рiзницi доходу i виробничих витрат на вартiсть обладнання для окремого виробу по його облiковому коду;
21) Визначити середнiй коефiцiєнт окупностi витрат по всiм виробам
22) Визначити строк окупностi для кожного iз виробiв по його облiковому коду; при цьому вiдомо, що для всiх виробiв обсяг реалiзацiї продукцiї збiльшується щорiчно на 5%, а виробничi витрати збiльшуються щорiчно на 8%; строк окупностi визначається як мiнiмальний термiн покриття вартостi обладнання за рахунок прибутку вiд капiталовкладень ( див. умову 18);
23) Визначити середнiй строк окупностi (Див. умову 22) по всiм виробам;
24) Видати код обладнання i пояснення по експлуатацiї для тих об'єктiв БД, коефiцiєнт окупностi витрат (див. умову 20) яких бiльше нiж 0,15, визначити загальне число таких об'єктiв;
25) Видати код обладнання i коментарiї по експлуатацiї для тих об'єктiв БД, строк окупностi (див. умову 22) яких, менше нiж 2,5 роки, визначити загальне число таких об'єктiв.
Поради до виконання роботи з комп’ютерного практикуму 4
Пролог — могутнiй засiб для управлiння реляцiйними базами даних.
Механiзм функцiонування системи ПРОЛОГ дозволяє автоматично вибирати факти з потрiбними значеннями вiдомих параметрiв та присвоювати вiдповiднi значення невiдомим параметрам, а також шукати всi можливi розв'язки за допомогою алгоритма повернення. Iснують методи роботи з динамiчною базою даних, якi приначенi для додавання та видалення iнформацiї з неї пiд час виконання програми. Для збiльшення швидкостi обробки виликих баз даних, факти, якi вiдносяться до динамiчної бази даних,
обробляються трiшки по iншому, нiж звичайнi предикати. Через це, предикати, якi призначенi для роботи iз зовнiшньою базою даних, повиннi бути оголошенi у роздiлi database програми для видiлення їх серед iнших предикатiв.
Оголошення бази даних
Оголошення предикатiв, якi вiдносяться до динамiчної бази даних, мiститься у роздiлi програми, який починається з ключового слова database. Динамiчною базою даних є база даних, до якої пiд час виконання програми можуть додаватися факти. Роздiл database у програмi повинен розмiщуватись до роздiлiв predicates, наприклад:
domains
iм'я,адреса = string
вiк = integer
стать = жiнка; чоловiк
database
особистiсть(iм'я,адреса,вiк,стать)
predicates
жiнка(iм'я,адреса,вiк)
чоловiк(iм'я,адреса,вiк)
дитина(iм'я,вiк,стать)
clauses
чоловiк(N,A,V) if
особистiсть(N,A,V,чоловiк).
. . .
Предикат особистiсть може використовуватись у програмi так само, як
i iншi предикати, за винятком того, що для цього предиката пiд час виконання програми можуть виконуватись та видалятись факти.
Для роботи з динамiчною базою даних у мові Prolog передбачено три стандартних предиката.
Предикат asserta розмiщує новий факт в базу даних до всiх iснувавших в нiй фактiв для даного вiдношення, а предикат assertz — в її кiнець. Предикат retract видаляє конкретний факт з бази даних.
Наприклад, перша з наступних двох цiлей додає до бази даних новий факт про "Бориса", а друга видаляє з бази даних найперший факт про "Володимира".
assertz(особистiсть("Борис","Бердянськ",35) ).
retract(особистiсть("Володимир",_,_) ).
Для того, щоб модифiкувати факт у базi даних, треба спочатку видалити цей факт з бази даних, а потiм додати нову версiю цього факта. Вся база даних цiлком може бути збережена у зовнiшньому текстовому файлi за допомогою виклику предиката save. В якостi аргумента предиката save необхiдно задати iм'я файла.
save("data_base.dba")
Потiм збережена база даних може бути загружена в оперативну пам'ять за допомогою предиката consult:
consult("data_base.dba")
Виконання предиката consult закiнчиться успiшно (предикат узгодиться), якщо факти, якi знаходяться у файлi, не мiстять синтаксичних помилок, в iншому разi предикат не узгодиться.
Обробка фактiв
Предикат readterm забезпечує можливiсть читання окремих фактiв, якi зберiгаються в файлi на диску. Факти повиннi бути записанi у файлi предикатом write. Предикат readterm може читати з файла не тiльки факти, але i будь-якi об'єкти, що записанi предикатом write.
Формат виклику предиката readterm наступний:
readterm(D_iм'я_домена,V_терм).
де D_iм'я_домена є iменем домена. Наступна програма приклад використання предиката readterm.
domains
iм'я,адреса = string
запис_даних = p(iм'я,адреса)
file = файл_записiв
predicates
особистiсть(iм'я,адреса)
база_даних(file)
clauses
особистiсть(N,A):
openread(файл_записiв,"fd.dat"),
readdevice(файл_записiв),
база_даних(файл_записiв),
readterm(запис_даних,p(N,A)).
база_даних(_).
база_даних(File): not(eof(File)),
база_даних(File).
Файл fd.dat мiстить факти, якi вiдносяться до оголошеного в програмi домена, наприклад:
p("Петро","вул.Горького,21").
p("Зоя","вул.Мира,50").
p("Ольга","вул.Мира,39").
А ось приклад дiалога, пiд час якого обробляється iнформацiя з дискового файла:
Goal : особистiсть("Петро",X).
X = "вул.Горького,21"
1 Solution
Факти, що вiдносяться до предикатiв, якi описанi в роздiлi database, обробляються так, наче вони є термами. Така можливiсть забезпечується доменом dbasedom, який автоматично оголошується (генерується) системою ПРОЛОГ i який створює по однiй альтернативi для кожного предиката, що
входить в базу даних, описується за допомогою вiдповiдного функтора i доменiв його аргументiв. В якостi приклада розглянемо оголошення:
database
особистiсть(iм'я,номер_телефона)
мiсто(вулиця,номер_будинка)
ПРОЛОГ згенерує вiдповiдний dbasedom:
domains
dbasedom = особистiсть(iм'я,номер_телефона);
мiсто(вулица,номер_будинка)
Цей домен в подальшому може використовуватись так само, як i будьякi iншi попередньо оголошенi домени. Наприклад, можна оголосити та потiм застосовувати в програмах предикат newconsult, аналогiчний за функцiєю стандартному предикату consult:
domains
n,a = string
file = файл_записiв
database
p(n,a)
predicates
new_consult(string)
repeat(file)
clauses
new_ consult(FN):—
openread(файл_записiв,FN),
readdevice(файл_записiв),
repeat(файл_записiв),
readterm(dbasedom,Term),
assertz(Term),
fail.
new_consult(_) :— eof(файл_записiв).
repeat(_).
repeat(FN) : —not(eof(FN)), repeat(FN).
В наведеному прикладi роздiл database програми мiстить оголошення:
p(string,string)
Файл fd.dat мiстить вже описану iнформацiю. В цьому випадку можливий наступний дiалог у процесi виконання програми:
Goal: new_consult("fd.dat").
True
Goal: p (X,Y).
X = "Петро", Y = "вул.Горького,21"
X = "Зоя", Y = "вул. Мира,50"
X = "Ольга", Y = "вул. Мира,39"
3 Solutions
Вбудованi предикати мови :
asserta та assertz
Виклик:
asserta( <факт> )
assertz( <факт> )
Тип аргументiв: (dbasedom)
Режим передачi аргументiв: (i)
Два предиката asserta и assertz дозволяють додавати новi факти до бази даних. Обидва предикати дiють однаковим чином, за тим винятком, що asserta додає новий факт у початок бази даних, а assertz додає факт у кiнець. Результат додавання до бази даних факта не знищується при виконаннi
повернення.
retract
Виклик:
retract(<факт>)
Тип аргументiв: (dbasedom)
Режим передачi аргументiв: (i)
Предикат видаляє з бази даних перший факт, який вiдповiдає аргументу (<факт>).
findall
Виклик :
findall(V_змiнна,<атом>,L_список)
Предикат findall використовується для збирання та запамIятовування у виглядi списка конкретних значень, якi надаються змiннiй в процесi узгодження мети за допомогою механизма повернення (Див. допомiжну лiт-ру).Якщо <атом>є предикатом, аргументи котрого мають допустимi для мови ПРОЛОГ iмена, а змiнна V_змiнна є одним з аргументiв цього предиката, то списку L_список буде надане значння списка значень змiнної V_змiнна, якi вона одержує на протязi процеса узгодження мети (з успiшним узгодження) з використанням механизма повернення.
Контрольні запитання
Статичні бази даних: складні області, однорівневі, дворівневі складені домени.
Конструкції альтернативних доменів.
Отримання структурованої інформації з статичної БД.
Реляційні БД.
Предикати роботи з БД.
Проектування СУБД.
Лiт-ра: [3]: С.520-565; [5]: С. 360 - 405.
Основи роботи
в системі програмування Пролог (СП Турбо-Пролог)
СП Пролог є інтегрованим інструментальним засобом, призначеним для розробки, налагодження й виконання програм, що написані мовою програмування Пролог. Система забезпечує виконання наступних основних функцій.
Підготовка та корегування текстових файлів, у т.ч. й вихідних текстів програм мовою Пролог.
Компіляція програм в оперативну пам’ять.
Виконання програм, які були скомпільовані в пам’ять.
Генерація об’єктних модулів програм.
Генерація завантажених модулів програм.
Для виконання цих функцій СП Пролог в межах єдиного інтегрованого програмного комплексу містить в собі наступні підсистеми:
екранний текстовий редактор, що забезпечує створення й корегування різноманітних текстових файлів, які включають вихідні тексти програм мовою Пролог;
компілятор мови програмування Пролог, що дозволяє генерувати модулі програм і розміщати їх як в оперативній пам’яті для подальшого виконання під управлінням СП Пролог, так і в незалежному файлі, що має стандартну для DOS структуру - це дозволяє виконувати його незалежно від СП Пролог в середовищі MS DOS;
виконавчу систему для виконання скомпільованих в оперативну пам’ять програм;
підсистему роботи з файлами, що забезпечує виконання в середовищі СП Пролог різних операцій із створення, копіювання, перейменування і видалення файлів;
сервісну підсистему для зміни конфігурації та режимів роботи системи.
СП Пролог являє собою інтерактивне середовище, що функціонує в 5-ти вікнах:
- меню, що знаходиться вгорі і складається з одного рядка (головне), дозволяє вибирати режим редагування, компіляції і виконання програми, а також змінювати режим роботи компілятора, регулювати колір, розмір і місце вікон, залишивчи відкореговану конфігурацію в спеціальному файлі;
- у вікні редактора відображається текст програми, яку загружено в середовище. Можна також отримати спливаюче вікно редактора для занесення в середовище додаткового файлу, із якого можливе перенесення інформації в основний файл. Причому, допускається заносити послідовно в це вікно скільки завгодно файлів; знову попасти в основне вікно редактора можна після натискання клавіші «Esc» стільки разів, скільки додаткових файлів було занесено;
- вікно повідомлень призначене для інформування користувача про поточні дії системи: введення/виведення файлу, процес компіляції;
- вікно діалогу активне під час виконання програми й призначене для приймання цільового твердження (мети) та виведення користувачу результатів виконання програми за цією метою;
- вікно відлагодження активне лише тоді, коли увімкнено системні засоби відлагодження програми, і дозволяє простежити по кроках хід виконання програми.
Управління роботою СП Пролог здійснюється шляхом вибору меню режимів, що надані на екрані. Вибір і виконання режиму можна здійснити двома шляхами:
натисканням клавіші переміщення курсора вибрати режим (при якому поточний режим в меню буде показаний в інверсному зображенні) і після натискання клавіші «Enter» почати виконання вибраного режиму;
введенням першої літери режиму з поточного меню, при цьому одночасно відбувається вибір і виконання потрібного режиму.
Повернення з меню нижчих рівнів у меню більш високого рівня відбувається при натисканні клавіші «Esc». Це буває необхідне для завершення роботи з даним меню (наприклад, при невдалому попередньому виборі режиму).
Режими головного меню
Головне меню дозволяє вибрати наступні режими.
Run - запуск з робочої області на виконання. Якщо програма ще не скомпільована, до виконання проводиться її компіляція.
Compile - компіляція програми, що знаходиться в робочій області текстового редактора.
Edit - редагування тексту програми в робочій області.
Options - вибір режиму роботи компілятора (компіляція в пам’ять, генерація об’єктного файлу з розширенням .obj або генерація виконуючого файлу з розширенням .exe).
Files - виконання файлових операцій.
Setup - вибір і зміна конфігурації СП Пролог.
Quit - завершення роботи СП Пролог.
Режим Run - використовується для запуску в середовищі СП Пролог поперденьо скомпільованої програми. Запуск скомпильованої програми здійснюється тільки в тому випадку, коли вихідний текст програми, що перебуває в текстовому редакторі, з моменту компіляції не редагувався. Якщо вихідний текст програми після компіляції редагувався або якщо компіляція корегованої програми в робочу область пам’яті ще не виконувалась, то перед запуском автоматично виконується її компіляція.
У СП Пролог можливі два способи виконання програми:
При наявності розділу goal в робочій програмі. У вікні діалогу або у власних вікнах програми з’являється інформація, що виводиться, виконується мета, яку було задано в програмі. Після завершення виконання програми для переходу в головне меню потрібно натискнути клавішу «пробіл».
Мета для програми задається користувачем в режимі діалогу. Це відбувається в тому випадку, якщо в програмі є відсутнім розділ goal. Діалог з програмою при цьому буде відображатися у вікні діалогу. Дозволяється задавати одну або декілька послідовних цілей.
Під час виконання програми перевизначаються функції окремих клавіш і комбінації клавіш. Функції клавіш під час виконання програми наведено у табл. 1.
Таблиця 1
|
Клавіша |
Функція під час виконання програми
|
|
F8 |
Автоматично повторює попередню мету на наступному рядку вікна діалогу
|
|
F9 |
Викликає перехід в режим текстового редактора з вікна діалогу
|
|
Shift + F9 |
Вибирає одне з вікон для послідовної зміни його розмірів
|
|
Shift + F10 |
Змінює розміри або переміщує вікно діалогу, якщо до цього моменту воно ініціювалось
|
|
Ctrl + S |
Тимчасово припиняє виведення інформації на екран або продовжує введення, що припинене
|
|
Ctrl + Break |
Припиняє виконання програми і повертає управління в головне меню або вікно діалогу
|
|
Ctrl + P |
Починає або припиняє паралельне виведення інформації, що з’являється у вікні діалогу, на друкувальний пристрій.
|
Режим Compile - виконується компіляція програми, вихідний текст якої знаходиться в робочій області текстового редактора. В залежності від встановленого режиму головного меню Options, можливі наступні варіанти розміщення скомпільованої програми:
- створений об’єктний файл розміщується на поточному пристрої.
Якщо програма є частиною проекту, то вона має починатись ключовим словом «project», після якого має йти ім’я проекту. Ім’я проекту необхідно також задати в режимі Files (рядок меню Module List).
- формується об’єктний файл, потім підключається режим автоматичної компоновки і створений Exe-файл розміщується на поточному. Якщо програма, що компілюється, є частиною проекту, то процес компоновки залежить від визначення проекту.
Створені на поточному пристрої об’єктні файли можна компонувати у виконувану програму за програмою Link під управлінням системи DOS, задаючи з путьта командний рядок.
Цей варіант використовується у тих випадках, коли для побудови виконуваних програм у середовищі СП Пролог не вистачає пам’яті. Для компоновки таких програм необхідно завершити роботу в СП Пролог, увійти до каталогу, який містить об’єктні файли, бібліотеку і, можливо, Link, потім задати одну з команд: Plink Program або Plink Project1. Перша команда побудує Exe- модуль з одного об’єктного файлу, а друга - із кількох об’єктних файлів, які описані у файлі опису проекту Project1.
Режим Edit - користувач може за допомогою текстового редактора створювати або модифікувати текстовий робочий файл. Ім’я файлу, що редагується, визначається в режимі Files, рядок меню - Filename. Якщо ім’я робочого файлу явно не визначене, то робочим файлом є Work.pro.
Користувач може також визначити файл, що модифікується, шляхом задання його імені в режимі Files, рядок меню - Load.
Вбудований в СП Пролог текстовий редактор дозволяє в процесі редагування робочого файлу виконати редагування ще одного файлу, при цьому інформація робочого файлу не втрачається.
Режим Options - дозволяє уточнювати варіант роботи компілятора (в режимі Compile).
При цьому можливий вибір одного з наступних варіантів.
Memory - скомпільована програма записується в робому область пам’яті (цей варіант приймається за умовчанням).
Obj file - генерація об’єктного файлу для подальшого сумісного редагування з іншими об’єктними файлами.
Exe file (auto link) - генерація виконуваного файлу з автоматичним викликом укладача Link.
Режим Files - можливий вибір однієї з наступних команд:
|
- Load |
- Copy |
- Zap file in editor |
|
- Save |
- Rename |
- Erase |
|
- Directory |
- File Name |
- Operating system |
|
|
- Module list |
|
Команда Load (Завантаження) - вибирає на диску файл (за умовчанням із каталогу Pro) і завантажує його в робочу область текстового редактора. Після цього у робочій області може редагуватися, компілюватися, виконуватися або зберігатися на диску. Після введення команди Load з’являється нове вікно, в якому знаходиться запит імені файлу. У відповідь можна увести:
- будь-яке допустиме ім’я файлу. Якщо не вказано розширення імені файлу (та крапка після імені), розширення .pro;
- шаблон імені файлу для пошуку одразу кількох файлів;
- Enter, що означає введення всіх файлів із розширенням .pro.
Після цього на екрані з’являється вікно із списком імен файлів, які знайдені в каталозі (за умовчанням Pro-каталозі). Вибір потрібного імені файлу із списку проводиться за допомогою клавіш управління курсором та клавіш Home, End, PgUp та PgDown. Ім’я вибраного файлу при цьому відображаєтья інверсним кольором. Для завантаження вибраного файлу потрібно натискнути клавішу Enter. При натисканні Esc відбувається вибір, а вікно із списком файлів зникає.
Команда Save (Записування на диск) - записує ім’я робочої області текстового редактора у файл на диск.
Попередній версії робочого файлу надається розширення .bak. Для запису робочої області у файл з іншим ім’ям необхідно ім’я цього файлу визначити за командою File Name.
Команда Directory (Задання робочої директорії) - використовується для задання імені каталогу Pro, в якому за умовчанням шукаються та зберігаються файли з вихідними текстами програм мовою Пролог, а також для перегляду змісту цього каталогу. Ім’я каталогу уводиться у відповідь на запит (так само, як при виконанні команди Directory режиму Setup): Directory: C\Prolog.
Імена інших каталогів визначаються в режимі Setup.
Команда File Name (Ім’я файлу) - використовується для присвоєння робочому файлу (за умовчанням Work.pro) іншого імені. Ця команда не впливає на жодний файл на диску. Її необхідно виконати, наприклад, перед збереженням (за командою Save) тексту, який вже відредагований (з робочої області) у файлі, ім’я якого відрізняється від імені вихідного файлу.
Команда Module List (Список модулів) - використовується для вибору та редагування файлу, опису проекту. Користувач може увести ім’я файлу або вибрати його із списку, який з’являється у спеціальному вікні (як у команді Load). Потім система переходить в режим текстового редагування, що дозволяє створювати або модифікувати список модулів, які входять в проект.
Команда Zap File in Editor (Чищення вікна редактора) - очищає робочу область текстового редактора. Ім’я робочого файлу не змінюється.
Команда Print (Друк) - виводить програму на друк.
Команда Erase (Видалення файлу з диска) - видаляє файл з диска. Вибір файлу, що видаляється, відбувається аналогічно тому, як описано для команди Load.
Команда Rename (Перейменування файлу) - дозволяє перейменувати файл. Система спочатку запитує ім’я файлу, що перейменовується (Old name). Потім просить ввести нове ім’я файлу (New name), так само, як у команді Load. Ім’я файлу можна задавати в явному вигляді або вибирати з списку каталогу.
Команда Copy (Копіювання файлу) - дозволяє копіювати файл. Система спочатку заптує ім’я файлу, що копіюється (Copy from). Потім просить ввести ім’я нового файлу (Copy to). Так само, як і в команді Load, ім’я файлу можна задавати явно або вибирати з списку файлів каталогу.
Команда Operating System (Тимчасовий вихід в операційну систему) - дозволяє під час сеансу роботи з СП Пролог тимчасово вийти в середовище DOS. При цьому СП Пролог залишається резидентним у пам’яті. У каталозі DOS має знаходитись та ж сама версія файлу Command.com, яка була використана під час завантаження операційної системи. У середовищі DOS можна виконувати будь-які команди операційної системи. Для повернення керування в СП Пролог необхідно ввести команду Exit.
Команда Setup (Настроєння системи) - опції команди Setup призначені для утворення власного варіанту настроєння системи Турбо-Пролог. Після вибору Setup з’являється меню з опціями Colors, Window Size, Directories, Miscellaneous Setting, Load Configuration, Save Configuration:
опція Colors (Колір) - призначена для зміни кольору переднього плану та фону. Для зміни у меню, яке з’явилося, використовується рядок Edit і натискається клавіша Enter. Колір фону змінюється за допомогою стрілок та , а колір переднього плануза допомогою стрілок та . Натиснення іншої клавіші приводить до закінчення цього процесу. Надпис Attr у правій частині рядка показує номер обраного кольору. Вихід з опції Colors здійснюється через натиснення клавіші Esc;
опція Window Size (Розмір вікна) - призначена для настроєння розмірів вікон. Для зміни розмірів вікна редактора необхідно виконати слідуючі дії:
вибрати опцію Window Size;
вибрати рядок Edit;
маніпулюючи стрілками та (горизонтальний розмір), та (вертикальний розмір), отримуємо вікно необхідних габаритів. Зміна місця розташування вікна виконується комбінацією Shift+стрілки. Натиснення іншої клавіші зупиняє цей процес. Esc повертає користувача в меню команди Setup;
опція Save Configuration (Зберігання поточного розміщення вікон) - дозволяє зберігати поточне розміщення вікон для подальшого його використання. Вибір цієї опції спричиняє появлення на екрані рядка для введення імен конфігураційного файлу. Після введення імені необхідно натиснути клавішу Enter. За умовчанням, якщо не задавати шлях доступу, конфігураційний файл буде записано в директорію початкових текстів програм, так звану .Pro-директорію. (Якщо ввести ім’я Prolog.SYS та записати файл у директорію системних файлів Турбо-Пролога, то дана конфігурація в подальшому буде завантажуватись за умовчанням);
опція Load Configuration (Завантаження нової конфігурації вікон) - для завантаження нової конфігурації вікон з диска необхідно вибрати в меню опцію Load Configuration, ввести ім’я конфігураційного файлу та натиснути клавішу Enter. За умовчанням пошук файлу буде здійснюватись в директорії файлів з розширенням .Pro. Після завантаження файлу на екрані з’явиться потрібна конфігурація вікон. Для повернення в головне меню необхідно натиснути на клавішу прогалика;
опція Directories (Задання імен директорій) - призначена для задання імен директорій, до яких Турбо-Пролог буде звертатись за умовчанням. Такими є .Pro directory (директорія початкових текстів програм - файлів з розширенням PRO), .OBI directory (директорія об’єктних файлів з розширенням OBI), .EXE directory (директорія EXE-файлів), Turbo directory (системна директорія Турбо-Прологу) та DOS directory (директорія команд DOS);
опція Miscellaneous Setting (Настроювання графічного адаптера) - призначена для настроювання графічного адаптера IBM EGA та для встановлення розміру стеку. За умовчанням довжина стеку дорівнює 4000. Довжину можливо задавати в інтервалі 6004000. Турбо-Пролог використовує стек для реалізації механізмів відкота та рекурсії. Переповнення стека призводить до аварійного завершення програми та втрати даних.
Компіляція та редагування програми в СП Турбо-Пролог
Файли початкових текстів мають розширення .PRO. Турбо-Пролог дозволяє відкомпілювати початковий текст програми в пам’ять та запустити його на обчислювання у рамках системи. Для створення EXE-файлів, які можуть запускатися поза системою, необхідно відкомпілювати та відредагувати початковий текст програми.
Для утворення EXE-файлу Турбо-Пролог утворює файли з об’єктним кодом модулів, які мають розширення .OBI. Їх можна відредагувати сумісно з бібліотечними файлами Турбо-Прологу та отримати EXE-файл. Якщо обрана опція Exe file в меню команди Options, то програма буде редагуватись автоматично.
Для створення EXE-файлів необхідно виконати слідуючі кроки.
Завантажити програму в пам’ять.
Задати команду Options в головному меню та опцію .EXE в меню команди Options.
Задати команду Compile в головному меню і натиснути клавішу Enter.
Турбо-Пролог почне компілювати програму. За розвитком компіляції можна слідкувати за повідомленнями, які з’являються в інформаційному вікні. У випадку успішного завершення трансляції система створює .OBI, .SYM, .MAP та .EXE-файли.
Трасування програми
Трасування програми дає звіт про покрокове виконання програми. Для того, щоб використати цей засіб, необхідно включити в програмний файл директиву trace. Директива trace має розміщуватися в програмі попереду розділів predicates та domains.
Директива трасування припиняє виконання програми після кожної спроби задовольнити мету. При цьому у вікні трасування друкуються значення змінних. Для продовження виконання програми необхідно натиснути функціональну клавішу F10. Припинити виконання програми дозволяє клавіша Esc.
Якщо необхідно провести трасування тільки деяких предикатів, то імена цих предикатів необхідно переобчислити в параметрах директиви trace.
Під час трасування програми, яка містить помилки, курсор редактора вказує на початок предиката або правила, де ця помилка здійснилася.
Комбінація Ctrl-T під час трасування дає можливість вмикати або вимикати трасування за необхідністю.
Список літератури
Братко И. Алгоритмы искусственного интеллекта на языке PROLOG. — 3-е изд. М.: Издательский дом «Вильямс», 2004. — 640с.
Малпас Дж. Реляционный язык Пролог и его применение. — М.: Наука. Гл. ред. физ.-мат. лит., 1990. — 464 с.
Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual Prolog. — СПб.: БХВ-Петербург, 2003. — 992с.
Люгер Дж. Искусственный интеллект: стратегии и методы решения сложных проблем.— М.: Издательский дом «Вильямс», 2003. — 864 с.
Ін Ц., Соломон Д. Использование Турбо-Пролога. – М.: Мир, 1993. — 608 с.
ПРИКЛАД ВАРІАНТУ МОДУЛЬНОЇ КОНТРОЛЬНОЇ РОБОТИ
Теоретична складова
Семантична модель Прологу у вигляді абстрактної машини.
Для чого використовується наступна конструкція (пояснити необхідність другої форми правила):
rule:-<предикати-і-правила>,fail.
rule.
Списки. Використання методу з поділом списку на «голову» і «хвіст».
Практична складова
1. Проаналізувати наведену структуру.



СТУДЕНТ
|
ПІБ |
група |
Список оцінок сесії |
Члени родини або нежонатий/ незаміжня | ||
|
/ | \ |
|
|
/ | \ | ||
|
П І Б |
|
|
П |
І |
Б |
2. У розділі domaіns навести опис структури.
3. Здійснити пошук у статичної БД "студент" усіх відмінників факультету ПМ (по приналежності групам КА, КМ, КС).
Student (fіo, group, sessіon, famіly)
