Внутренняя база данных
При программировании часто возникает необходимость хранения информации. В процедурных языках это реализуется с помощью глобальных переменных. В Prolog (Turbo, PDC, Visual) подобное моделируется с помощью внутренней базы данных. Во время исполнения программы в базе данных можно хранить (добавлять, удалять) только факты, описанные в секции database (в Visual Prolog аналогично используется секция facts). Факты не должны содержать несвязанных переменных. Базе данных можно задать внутреннее имя описанием database – name. Приведем предикаты для работы с фактами. Таблица 12.1 – Назначение предикатов для работы с внутренней базой данных
Пример 1. Программа, моделирующая стек.
domains element=integer database stack(element)
predicates
pusto % стек пуст? add_stack(element) % добавить в стек del_stack(element) % удалить из стека read_stack(element) % просмотр стека без изменения write_stack % распечатать все элементы стека clear_stack % очистить стек
clauses pusto :- stack(_),!,fail. pusto.
del_stack(X):- free(X), retract(stack(X)),!.
add_stack(X):-bound(X), asserta(stack(X)),!.
read_stack(X):-free(X), retract(stack(X)), asserta(stack(X)),!.
write_stack:-stack(X),write(X),nl,fail. write_stack. clear_stack:-retract(stack(_)),fail. clear_stack.
goal add_stack(1),add_stack(2), write_stack, write("-------------"),nl, read_stack(X), write (X),nl.
Факты базы данных можно сохранять и загружать в процессе исполнения программы с помощью следующих предикатов. Таблица 7 – Назначение встроенных предикатов сохранения и загрузки внутренней базы данных
Предикат consult выполняет загрузку в память фактов аналогично assertz.
|
