Предикаты динамической базы данных.
В Турбо-Прологе имеются и специальные встроенные предикаты для работы с динамической базой данных. Таковыми являются asserta, assertz, retract, save, consult, readterm и findall. В следующем разделе мы опишем эти предикаты и покажем, как нужно их использовать.
Предикаты asserta, assertz и retract позволяют занести факт в заданное место динамической БД и удалить из нее уже имеющийся факт.
Предикат asserta заносит новый факт в базу данных, располагающуюся в оперативной памяти компьютера (резидентная БД). Новый факт помещается перед всеми уже внесенными утверждениями данного предиката. Этот предикат имеет такой синтаксис:
asserta(Clause).
Таким образом, чтобы поместить в БД утверждение
dplayer("Bernie Kosar","Cleveland Browns","QB").
перед уже имеющимся там утверждением
dplayer("Doug Cosbie","Dallas Cowboy","TE").
( стоящим в настоящий момент в базе данных на первом месте),
необходимо следующее предикатное выражение
asserta(dplayer("Bernie Kosar","Cleveland Browns","QB")).
Теперь БД содержит два утверждения, причем утверждение со сведениями о Kosar предшествует утверждению со сведениями о Cosbie:
dplayer("Bernie Kosar","Cleveland Browns","QB").
dplayer("Doug Cosbie","Dallas Cowboy","TE").
Крайне важно отдавать себе отчет в том, что в динамической базе данных могут содержаться только факты (не правила). В этом состоит отличие Турбо-Пролога от других реализаций языка Пролог.
Предикат assertz так же, как и asserta, заносит новые утверждения в базу данных. Однако он помещает новое утверждение за всеми уже имеющимися в базе утверждениями того же предиката. Синтаксис предиката столь же прост:
assertz(Clause).
Для добаления к двум уже имеющимся в БД утверждениям третьего
dplayer("Mark Malone","Pittsburgh Steelers","QB").
требуется следующее предикатное выражение:
assertz(dplayer("Mark Malone","Pittsburgh Steelers","QB")).
после чего БД будет содержать третеего утверждения
dplayer("Bernie Kosar","Cleveland Browns","QB").
dplayer("Doug Cosbie","Dallas Cowboy","TE").
dplayer("Mark Malone","Pittsburgh Steelers","QB").
Третье, новое, только что занесенное утверждение, следует за двумя старыми.
Предикат retract удаляет утверждение из динамической БД (еще раз напомним, что динамическая БД содержит факты, но не правила.)
Его синтаксис таков:
retract(Existing_clause).
Предположим, что вы хотите удалить из базы данных второе утверждение. Для этого необходимо написать выражение
retract(dplayer("Doug Cosbie","Dallas Cowboy","TE")).
и БД будет состоять уже только из двух утверждений:
dplayer("Bernie Kosar","Cleveland Browns","QB").
dplayer("Mark Malone","Pittsburgh Steelers","QB").
Так же, как asserta и assertz, retract применим только в отношении фактов.
Для модификации базы данных можно использовать комбинацию выражений с предикатами asserta, assertz и retract. Например, для того, чтобы отредактировать содержащееся в БД утверждение, ваша программа должна получить данные от пользователя, составить новое утверждение, удалить старое и занести новое.
Дата добавления: 2016-05-05; просмотров: 760;