Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Предикат flush/1

Предикат flush записывает содержимое внутреннего буфера в названный

файл. Имеет формат:

flush (SymbolicFileName) /* (i) */

Предикат flush полезен, когда вывод направляется на устройство печа-

ти, и вам необходимо выдать данные на печать до того, как буфер заполнит-

ся.

Замечание: После операции flush, так как ДОС перед закрытием

файла не запишет файловые буферы на диск, не обеспечивается сох-

ранность дисковых файлов. Единственный путь гарантировать целос-

тность дискового файла это закрыть его (и снова открыть, когда

это будет необходимо).

Предикат existfile/1

Предикат existfile выпомняется успешно, если файл DosFileName будет

найден в каталоге ДОС на текущем дисковом устройстве. Формат его следую-

щий:

existfile(DosFileName) /* (i) */

Предикат existfile терпит неудачу, если имя не найдено в каталоге,

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

мер, MY*.PRO или ??PROJ.* ).

Для проверки того, что файл присутствует на диске, прежде чем откры-

вать его вы можете использовать следующую последовательность:

open(File,Name):-

existfile(Name),!,

openread(File,Name).

open(_,Name) :-

write("Error: the file ",Name," is not found").

Предикат deletefile/1

Предикат deletefile удаляет файл, заданный его аргументом и имеет

такой формат:

deletefile(DosFileName) /* (i) */

Предикат deletefile даст ошибку, если не сможет удалить файл.

Предикат renamefile/2

Предикат renamefile переименовывает файл с именем OldDosFileName в

NewDosFileName. Имеет формат:

renamefile(OldDosFileName,NewDosFileName) /* (i,i) */

Предикат renamefile будет успешен, если файл с именем

NewDosFileName, еще не существует и оба имени являются допустимыми. В

противном случае будет выдана ошибка.

Предикат disk/1

Предикат disk используется для изменения текущего диска и катало-

га/подкаталога и имеет формат:

disk(DosPath) /* (i) (o) */

При вызове свободной переменной в качестве параметра disk возвратит

текущий каталог.

Расширение базы данных с помощью файлов

Предикат readterm позволяет получить доступ к фактам в файле.

readterm может считать любые объекты, записанные предикатом write, и име-

ет вид:

readterm(<name>,TermParam),

где <name> - имя домена. Следующая программа показывает, как readterm мо-

жет быть использован.

domains

nam,addr = string

one_data_record = p(name,addr)

file = file_of_data_records

predicates

person(name,addr)

moredata(file)

clauses

person(Name,Addr) :-

openread(fie_of_data_records,"dd.dat"),

readdevice(file_of_data_records),

moredata(file_of_data_records),

readterm(one_data_record,p(Name,Addr)).

moredata(_).

moredata(File):-

not(eof(File)),

moredata(File).

Если файл DD.DAT содержит факты принадлежащие к домену

one_data_record,такие как

p("Peter","28th Street")

p("Curt","Wall Street"),

то последующее является примером диалога, который возвращает информацию

из этого файла:

Goal : person("Peter",Address).

Address = "28th Street"

1 Solution

Goal : person("Peter","Not an address").

No

Goal :

Соседние файлы в папке Документация