МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Базы и банки знаний

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

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

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

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

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

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

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

    Выводы.

    Была написана программа, реализующая поставленную задачу. При написании

    программы автор ознакомился с основными понятиями, касающимися баз данных,

    использованием предикатов и правил для работы с файлами, списками,

    элементами списков. Работа над составлением программы позволила детально

    ознакомиться с вопросами организации данных в БД и извлечения из неё

    необходимой пользователю информации.

    Литература.

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


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.