Динамические базы данных Лекция 12
План Работа с внутренними (динамическими) базами данных: добавление фактов в базу, удаление фактов из базы Проекты «Телефонный справочник», «Словарь»
Описание предпкатов базы данных DATABASE [ ] (,..., )
Добавление и удаление фактов, сохранение, загрузка БД assert (факт[, имя_бд]) asserta (факт[, имя_бд]) assertz (факт[, имя_бд]) retract (факт[, имя_бд]) retractall (_[, имя_бд]) save (имя_файла[, имя_бд]) consult (имя_файла[, имя_бд])
Удаление всех фактов retractall2(Fact):– retract(Fact), fail. retractall2(_).
Телефонный справочник start:– existfile("phones.ddb"),!, consult("phones.ddb "), menu. start:– openwrite(f,phones.ddb"), closefile(f), menu.
Меню menu:– clearwindow, write("1 - Получение телефонного номера по фамилии"), nl, write("2 - Получение фамилии по номеру телефона"), nl, write("3 - Добавление новой записи в справочник"), nl, write("4 - Изменение номера абонента"), nl, write("5 - Удаление записи из телефонной базы"), nl, write("0 - Выйти"), nl, readchar(C), menu(C).
Выход из программы m('0'):– save("phones.ddb"), retractall(_). m(_):– menu.
Получение телефонного номера по фамилии m('1'):– clearwindow, write("Введите фамилию"), nl, readln(Name), name_phone(Name, Phone), write("Номер телефона: ",Phone), readchar(_), menu.
Получение телефонного номера по фамилии name_phone(Name,Phone):– phone(Name,Phone),!. name_phone(_,Нет информации о телефонном номере").
Получение фамилии по телефонному номеру m('2'):– clearwindow, write("Введите номер телефона"),nl, readln(Phone), phone_name(Name, Phone), write("Фамилия абонента: ",Name), readchar(_), menu.
Получение фамилии по телефонному номеру phone_name(Name,Phone):– phone(Name,Phone). phone_name("Нет информации о владельце телефона",_).
Добавление факта в БД m('3'):– clearwindow, write("Введите фамилию"),nl, readln(Name), write("Введите номер телефона"),nl, readln(Phone), assert(phone(Name,Phone)), menu.
Обновление факта в БД m('4'):– clearwindow, write("Введите фамилию"),nl, readln(Name), write("Введите новый номер телефона"),nl, readln(Phone), retract(phone(Name,_)), assert(phone(Name,Phone)), menu.
Удаление факта из БД m('5'):– clearwindow, write("Укажите удаляемый номер телефона"), nl, readln(Phone), retract(phone(_,Phone)), menu.
Начало программы DOMAINS name, number = String file=f DATABASE phone(name, number) PREDICATES name_phone(name, number) phone_name(name, number) m(char) menu start
Вычисление чисел Фиббоначи fib(0,1):–!. fib(1,1):–!. fib(N,F) :– N1=N–1, fib(N1,F1), N2=N–2, fib(N2,F2), F=F1+F2.
Быстрый поиск числа Фиббоначи fib_fast(0,1,1):–!. fib_fast(N,FN,FN1):– N1=N–1,fib_fast(N1,FN_1,FN), FN1=FN+FN_1.
Использование динамической БД для вычисления чисел Фиббоначи fib2(0,1):–!. fib2(1,1):–!. fib2(N,F):– fib_db(N,F),!. fib2(N,F) :– N1=N–1, fib2(N1,F1), N2=N–2, fib2(N2,F2), F=F1+F2, asserta(fib_db(N,F)).