Рефетека.ру / Информатика и програм-ие

Реферат: Базы и банки знаний

Санкт-Петербургский государственный технический университет

Кафедра системного анализа и управления

РАСЧЕТНОЕ ЗАДАНИЕ

Дисциплина: базы и банки знаний.

Тема: язык Пролог.

Выполнил студент группы 3082/2 Торопов. К.Д.

Проверил


“__”___________2001г.

Санкт-Петербург

2001

Содержание.
1.Теоретическая часть……………………………………………………………3.
2.Постановка задачи......................................................................
.....................…4.
3.Текст программы...................................................................
...............................4.
4.Выводы....................................................................
.............................................13.
5.Литература................................................................
............................................13.

Теоретическая часть.

Prolog является компиляторно-ориентированным языком программирования высокого уровня и предназначен для программирования задач из области искусственного интеллекта(ИИ) . Как язык программирования ИИ он особенно хорош для создания экспертных систем, динамических баз данных, программ с применением естественно-языковых конструкций; он также может быть использован для других задач общего характера. Prolog имеет окна, цветную графику и интерактивные средства ввода-вывода, что свидетельствует о его максимальном удобстве для пользователя прикладных программ.

Prolog – это декларативный язык, программы на котором содержат объявления логических взаимосвязей, необходимых для решения задачи.
Обозначения, используемые в Prolog для выражения логических взаимосвязей, унаследованы из логики предикатов.

Prolog имеет внутренние подпрограммы для выполнения сопоставления и связанных с ним процессов. Они являются неотъемлемой частью языка и называются внутренними подпрограммами унификации. Эти подпрограммы выполняют сопоставление целей и подцелей с фактами и головами правил для того , чтобы доказать (или вычислить) эти цели или подцели. Эти же подпрограммы определяют, сгенерированы ли новые подцели правой части правила. Программист в соответствии с логическим синтаксисом Prolog объявляет, какие факты и правила дают тот или иной результат при различных подцелях, а внутренние подпрограммы унификации выполняют оставшуюся часть работы.

Факты и правила являются утверждениями, которые образуют данные программы на Prolog. Правила имеют левую часть и правую часть. Левая часть правила истинна, если истинна правая часть правила. Правила генерируют новые факты, когда все утверждения в теле оказываются вычисленными.
Prolog использует откаты для определения альтернативных путей вычисления цели или подцели. Если подцель оказалась неуспешной, а указатели отката были установлены, то для предыдущей подцели будет сделана попытка добиться успеха, начиная с точки отката.

Prolog позволяет выполнять целый ряд операций со списками. Их перечень включает: доступ к объектам списка, проверка на принадлежность к списку, разделение списка на два, слияние двух списков, сортировку элементов списка в порядке возрастания или убывания.

Prolog обеспечивает возможности для удобной и эффективной обработки файлов. Сюда можно включить встроенные предикаты для обработки и закрытия файлов, чтения из файла и записи в файл, изменения данных в файле, а также дозапись в уже существующий файл. Данные из файла могут обрабатываться либо как непрерывный поток символов, либо как структурированные объекты типа записей базы данных.

В Prolog имеются специальные средства для организации баз данных. Эти средства рассчитаны на работу с реляционными базами данных, так как Prolog особенно хорош для написания диалоговой системы именно для реляционной БД: внутренние унификационные процедуры языка осуществляют автоматическую выборку фактов с нужными значениями известных параметров и присваивают значения ещё не определённым. К тому же механизм отката позволяет находить все имеющиеся ответы на сделанный вопрос.

Постановка задачи.
Требуется написать программу учёта книг – название, автор(или список авторов), год выпуска, издательство. Программа должна позволять найти нужную книгу, добавить/удалить книгу, изменить содержимое нужной записи и сохранить всё в файл.

Текст программы.

DOMAINS name,izd,aut=string list=aut* god=integer file=datafile; indexfile

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) /*удаление элемента списка*/

GOAL do_dbase.

CLAUSES
/*Диалог с этой базой данных осуществляется по принципу меню.
Основываясь на запросе пользователя, СУБД активизирует соответствующие процессы для удовлетворения этого запроса.*/

/*задание цели в виде правила*/ do_dbase :- menu. menu:- repeat,

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,

Choice>0,Choice0,C=0, filepos(datafile,Datpos,0), readdevice(datafile), readterm(dbasedom,Term),!, filepos(indexfile,-9,1),

/*Этот предикат вызывает запись на диск содержимого внутреннего буфера индексного файла. Таким образом dbret1 предотвращает возможность работы с данными, которые были удалены до этого.*/ flush(indexfile), writedevice(indexfile), writef("%7.0n",-1), readdevice(keyboard), writedevice(screen).

/*осуществляет поиск нужного индекса в индексном файле*/ dbret1(Term,_):- readdevice(indexfile), readreal(Datpos1), dbret1(Term,Datpos1).

/* Правило dbrd извлекает информацию из файла datafile */ dbrd(Term,Indexfile,Datafile):- openread(datafile,Datafile), openread(indexfile,Indexfile),

/*испльзуется вспомогательный модуль dbaaccess, осуществляющий поиск и выборку данных из файла БД*/ dbaaccess(Term,-1), closefile(datafile), closefile(indexfile).

/*Этот предикат читает данные, логически связанные со значением индекса, задаваемым переменной Datapos.*/ dbaaccess(Term,Datpos):-

Datpos>=0, filepos(datafile,Datpos,0), readdevice(datafile), readterm(dbasedom,Term).

/*Это правило пытается найти в базе такую запись, индекс которой присутствует в индексном файле. Если индекс находится, то правило успешно; если нет, то неуспешно.В случае успеха переменная Term получает нужные пользователю значения*/ dbaaccess(Term,_):- readdevice(indexfile), readreal(Datpos1), dbaaccess(Term,Datpos1).

/* Правила работы со списками */
/*Чтение списка*/ readlist([H|T]):- write("> "),nl, readln(H),!, readlist(T). readlist([]).
/*Вывод списка*/ writelist([H|T]):- write(H, " "), writelist(T). writelist([]).
/*Присоединение списка*/ 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).

Выводы.

Была написана программа, реализующая поставленную задачу. При написании программы автор ознакомился с основными понятиями, касающимися баз данных, использованием предикатов и правил для работы с файлами, списками, элементами списков. Работа над составлением программы позволила детально ознакомиться с вопросами организации данных в БД и извлечения из неё необходимой пользователю информации.

Литература.

Ц. Ин, Д. Соломон «Использование Турбо-Пролога» , Издательство «Мир»


Рефетека ру refoteka@gmail.com