Санкт-Петербурзький державний технічний університет p>
Кафедра системного аналізу та управління p>
РОЗРАХУНКОВО ЗАВДАННЯ p>
Дисципліна: бази і банки знань. p>
Тема: мова Пролог. p>
Виконав студент групи 3082/2 Торопов. К.Д. p>
Перевірив p>
"__"___________ 2001р. P>
Санкт-Петербург p>
2001 p>
Зміст.
1.Теоретіческая частина ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 3.
2.Постановказадачі ................................................. .....................< br>..................... ... 4.
3.Текстпрограми ................................................. ..................< br>............................... 4.
4.Виводи ............................................... .....................< br>............................................. 13.
5.Література ............................................... .................< br>............................................ 13. P>
Теоретична частина. p>
Prolog є компіляторно-орієнтованою мовоюпрограмування високого рівня і призначений для програмування задачз області штучного інтелекту (ШІ). Як мова програмування ІІ вінособливо хороший для створення експертних систем, динамічних баз даних,програм із застосуванням природно-мовних конструкцій, він також можебути використаний для інших завдань загального характеру. Prolog має вікна,кольорову графіку і інтерактивні засоби введення-виведення, що свідчитьпро його максимальній зручності для користувача прикладних програм. p>
Prolog - це декларативний мову, програми на якому містятьоголошення логічних взаємозв'язків, необхідних для вирішення задачі.
Позначення, використовувані в Prolog для вираження логічних взаємозв'язків,успадковані з логіки предикатів. p>
Prolog має внутрішні підпрограми для виконаннязіставлення і пов'язаних з ним процесів. Вони є невід'ємною частиноюмови і називаються внутрішніми підпрограмами уніфікації. Ці підпрограмивиконують зіставлення цілей і підцілей з фактами і головами правил длятого, щоб довести (або обчислити) ці цілі або підцілі. Ці жпідпрограми визначають, згенеровані чи нові підцілі правій частиніправила. Програміст відповідно до логічним синтаксисом Prologоголошує, які факти і правила дають той чи інший результат при різнихпідцілі, а внутрішні підпрограми уніфікації виконують частину, що залишиласяроботи. p>
Факти і правила є твердженнями, які утворюють даніпрограми на Prolog. Правила мають ліву частину і праву частину. Ліва частинаправила істинна, якщо істинна права частина правила. Правила генеруютьнові факти, коли всі твердження в тілі виявляються вичисленими.
Prolog використовує відкати для визначення альтернативних шляхів обчисленнямети або підцілі. Якщо підцілі виявилася невдалої, а покажчики відкатубули встановлені, то для попередньої підцілі буде зроблена спроба добитисяуспіху, починаючи з точки відкату. p>
Prolog дозволяє виконувати цілий ряд операцій зі списками. Їхперелік включає: доступ до об'єктів списку, перевірка на приналежність досписку, розділення списку на два, злиття двох списків, сортуванняелементів списку в порядку зростання або зменшення. p>
Prolog забезпечує можливості для зручної та ефективноїобробки файлів. Сюди можна включити вбудовані предикати для обробки ізакриття файлів, читання з файлу і запису у файл, зміни даних у файлі,а також дозапісь у вже існуючий файл. Дані з файлу можутьоброблятися або як безперервний потік символів, або якструктуровані об'єкти типу записів бази даних. p>
У Prolog є спеціальні засоби для організації базданих. Ці кошти розраховані на роботу з реляційними базами даних, такяк Prolog особливо гарний для написання діалогової системи саме дляреляційної БД: внутрішні уніфікаціонние процедури мови здійснюютьавтоматичну вибірку фактів з потрібними значеннями відомих параметрів іприсвоюють значення ще не визначеним. До того ж механізм відкатудозволяє знаходити всі наявні відповіді на зроблений питання. p>
Постановка завдання.
Потрібно написати програму обліку книг - назва, автор (або списокавторів), рік випуску, видавництво. Програма повинна дозволяти знайтипотрібну книгу, додати/видалити книгу, змінити вміст потрібного запису ізберегти все у файл. p>
Текст програми. p>
DOMAINS name, izd, aut = string list = aut * god = integer file = datafile; indexfile p>
GLOBAL DATABASE kniga (name, list, izd, god)
PREDICATES nondeterm repeat/* повтор */nondeterm menu/* основне меню */nondeterm menu_modify/* меню модифікації */nondeterm process (integer)/* різні операції з переліку меню */nondeterm proc (integer)/* різні операції з переліку меню модифікації */nondeterm do_dbase/* мета */nondeterm dbassert (dbasedom)/* додавання даних */nondeterm dbass (dbasedom, string, string)/* модуль введення даних */nondeterm readlist (list)/* читання списку */nondeterm writelist (list)/* виведення списку */nondeterm dbretract (dbasedom)/* видалення даних */nondeterm dbret (dbasedom, string, string)/* модуль видалення даних */nondeterm dbret1 (dbasedom, real)/* допоміжний модуль видалення даних */nondeterm dbread (dbasedom)/* читання даних */nondeterm dbrd (dbasedom, string, string)/* модуль для вибірки даних */nondeterm dbaaccess (dbasedom, real)/* допоміжний модуль вибірки іпошуку даних */nondeterm append (list, list, list)/* приєднання списку */nondeterm delete_it (aut, list, list)/* видалення елемента списку */ p>
GOAL do_dbase. p> < p> CLAUSES
/ * Діалог з цією базою даних здійснюється за принципом меню.
Грунтуючись на запиті користувача, СУБД активізуєвідповідні процеси для задоволення цього запиту .*/ p>
/* завдання цілі у вигляді правила */do_dbase: - menu. menu: - repeat, p>
nl, write ("********************************* **"), nl, write ( "1.Add a book to database"), nl, write ( "2.Delete a book from database"), nl, write ( "3.View a book from database"), nl, write ( "4.Modify a book in database"), nl, write ( "5.Quit from this program"), nl, write ("**************** *******************"), nl, nl, write ( "Please enter your choice, 1,2,3,4,5:"), readint (Choice ), nl, p>
Choice> 0, Choice0, C = 0, filepos (datafile, Datpos, 0), readdevice (datafile), readterm (dbasedom, Term),!, filepos (indexfile, -9 , 1), p>
/* Цей предикат викликає запис на диск вмісту внутрішньогобуфера індексного файлу. Таким чином dbret1 запобігає можливостіроботи з даними, які були видалені до цього .*/flush (indexfile), writedevice (indexfile), writef ( "% 7.0n", -1), readdevice (keyboard), writedevice (screen). p>
/* здійснює пошук потрібного індексу в індексному фото */dbret1 (Term ,_):- readdevice (indexfile), readreal (Datpos1), dbret1 (Term, Datpos1). p>
/* Правило dbrd витягує інформацію з файлу datafile */dbrd (Term, Indexfile, Datafile): - openread (datafile, Datafile), openread (indexfile, Indexfile), p>
/* іспльзуется допоміжний модуль dbaaccess, що здійснює пошук і вибірку даних з файлу БД */dbaaccess (Term, -1), closefile (datafile), closefile (indexfile). p>
/* Цей предикат читає дані, логічно пов'язані зі значенняміндексу, що задається змінною Datapos .*/dbaaccess (Term, Datpos ):- p>
Datpos> = 0, filepos (datafile, Datpos, 0), readdevice (datafile), readterm (dbasedom, Term).
/* Це правило намагається знайти в базі такий запис, індекс якоїприсутня в індексному файлі. Якщо індекс знаходиться, то правило успішно;якщо ні, то неуспешно.В разі успіху мінлива Term отримує потрібнікористувачеві значення */dbaaccess (Term ,_):- readdevice (indexfile), readreal (Datpos1), dbaaccess (Term, Datpos1). p>
/* Правила роботи зі списками */
/* Читання списку */readlist ([H | T]): - write ( ">"), nl, readln (H),!, readlist (T). readlist ([]).< br>/* Висновок списку */writelist ([H | T]): - write (H, ""), writelist (T). writelist ([]).< br>/* Приєднання списку */append ([], L, L). append ([N | L1], L2, [N | L3]): - append (L1, L2, L3).
/* Видалення елемента списку */delete_it (_,[],[]). delete_it (X, [H | T], L):-H = X,!, delete_it (X, T, L). delete_it (X, [H | T], [H | L]):-delete_it (X, T, L). p>
Висновки. p>
Була написана програма, що реалізовує поставлене завдання . При написанніпрограми автор ознайомився з основними поняттями, що стосуються баз даних,використанням предикатів і правил для роботи з файлами, списками,елементами списків. Робота над складанням програми дозволила детальноознайомитися з питаннями організації даних у БД та вилучення з неїнеобхідної користувачеві інформації. p>
Література. p>
Ц. Ин, Д. Соломон «Використання Турбо-Прологу», Видавництво «Світ» p>
p>