.

Базы и банки знаний

Язык: русский
Формат: курсова
Тип документа: Word Doc
0 607
Скачать документ

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

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

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

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

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

Выполнил студент группы 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.0\n”,-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).

Выводы.

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

Литература.

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

PAGE

PAGE 11

Нашли опечатку? Выделите и нажмите CTRL+Enter

Похожие документы
Обсуждение

Оставить комментарий

avatar
  Подписаться  
Уведомление о
Заказать реферат!
UkrReferat.com. Всі права захищені. 2000-2020