Предикаты для работы с базой данных в целом.
В данном разделе будут описаны предикаты для работы с БД в целом. Предикаты save и consult применяются для записи динамической БД в файл на диск и для загрузки содержимого файла в динамическую БД.
Предикат save cохраняет находящуюся в оперативной памяти базу данных в текстовом файле. Синтаксис этого предиката
save(DOS_file_name).
где DOS_file_name есть произвольное допустимое в MS DOS или PC DOS имя файла.
Для того, чтобы сохранить содержимое футбольной БД в файле с именем football.dba, требуется предикат
save("football.dba").
В результате все утверждения находящейся в оперативной памяти динамической БД будут записаны в файл football.dba.
Если файл с таким именем уже имелся на диске, то этот старый файл будет затерт. Следует поэтому использовать предикат save с известной долей осторожности.
Файл БД может быть считан в память (загружен) при помощи предиката consult, систаксис которого таков:
consult(DOS_file_name).
Для загрузки файла футбольной БД требуется выражение
consult("football.dba").
Предикат consult неуспешен, если файл с указанным именем отсутствует на диске, или если этот файл содержит ошибки, как, например, в случае несоответствия синтаксиса предиката из файла описаниям из раздела программы database, или если содержимое файла невозможно разместить в памяти ввиду отсутствия места.
Предикат readterm используется для чтения из файла объектов, относящихся к определенному в программе домену. Синтаксис этого предиката
readterm(Domain,Term).
где Domain задает имя домена, а Term - различные наборы значений объектов этого домена. Рассмотрим, к примеру, предикатное выражение
readterm(auto_record,auto(Name,Year,Price)).
В этом выражении Domain замещен на auto_record, Term - на auto(Name,Year,Price). Терм auto определяет все наборы значений этого домена.
Необходимое описание доменов должно выглядеть так:
domains
name = string
year = integer
price = real
auto_record = auto(name,year,price)
file = auto_file
Предикат readterm обычно используется для считывания с диска данных, записанных в форме утверждений. Так в нашем случае, например, в файле могут находиться такие строки:
auto("Pontiac",1984,8550)
auto("Chevrolet",1982,2300)
auto("Chevette",1982,1500)
auto("Toyota",1986,11000)
Для получения доступа к файлу сначала необходимо воспользоваться предикатами openread и readdevice, после чего можно применить readterm.
В нашем примере предикат readterm пытается сопоставить auto с соответствующими утверждениями из файла. Если предикат успешен, переменные Name, Year и Price получают значения из соответствующего утверждения. Эти значения можно вывести на экран видео или же на любое другое выводное устройство.
Предикат findall позволяет собрать все имеющиеся в базе данные в список, который может быть полезен при дальнейшей работе.
Так, findall можно использовать для получения списка имен всех игроков.
После того, как успешным будет предикат
findall(Name,dplayer(Name,_,_),Name_list)
переменная Name_list содержит список имен всех игроков.
Дата добавления: 2016-05-05; просмотров: 971;