ТП позволяет переадресовывать логические устройства
ввода-вывода с помощью двух встроенных предикатов
readdevice
(СимвИмяФайла) (symbol)
: (i) (o)
Определяет или считывает символьное имя файла для устройства
ввода.
(i)
– связывает текущее устройство чтения с открытым файлом. Под СимвИменемФайла
понимается символьное имя клавиатуоы либо симвоьное имя файла, открытого для
чтения или модификации.
(o) – связывеат символьное имя файла с именем текущего
устройства чтения, которое может быть клавиатурой или файла.
readdevice
(X) X=клавиатура
writedevice
(СимвИмяФайла) (symbol)
: (i) (o)
Определяет или считывает символьное имя файла для устройства
вывода.
(i)
– переназначает текущее устройство записи на открытый файл с именем
СимвИмяФайла, который может быть одним из заранее определенных символьных имен
(screen или printer) или имеет символьное
имя, задаваемое пользоваетелем для файла, открытого для записи или модификации.
(o)
– связывает параметр СимвИмяФайла с именем текущего устрйоства записи, которое
может иметь имя screen,
printer или символьное
имя файла.
Параметр ИмяФайлаДОС может создать имя накопителя, но не
должен указывать путь.
deletefile
("C: progr.pro”)
Сохранение файла
save
(ИмяФайлаДОС) (string)
: (i)
Используется для записи на внешнйи накопитель динамической
базы данных. После этого файо можно снова загрузить в ОП. Если заданный файл
ИмяФайлаДОС уже существует, то его содержимое уничтожается.
Последовательность действий, необходимая для записи в файл:
1.Открытие
файла с помощью предиката openwrite.
Если файла с указанным именем нет, то создаетс яновый файл. Если файл уже есть,
то его содержимое будет утрачено. Чтобы от этого застраховаться, можно сначала
проверить наличие файла предикатом existfile, и принять соответствующие меры, если existfile будет успешным.
2.Назначение
файла в качнстве устройства записи предиката writedevice.
3.Самма
запись в файл write или
writef.
4.Использование
любых других предикатов и правил, отвечающих назначению программы.
5.Закрытие
файла предикатом closefile.
/* Вывод информации на экран дисплея в файл на диск */
domains
str = string
file = datafile
predicates
data (str)
write_lines
goal
openwrite (data, "a1.dat”),
write_lines,
closefile (datafile)
clauses
data ("aaaa”).
data ("bbbb”).
data ("cccc”).
. . . . . . .
write_lines:- data (Line),
write (" ", Line), nl,
writedevice (screen),
fail,
write_lines.
/* Считывание данных с клавиатуры и запись их в файл */
Рассмотренные ранее программы рассчитаны на минимальное
взаимодействие пользователя во время работы. Желательно включать модули,
которые при работе программы оказывают пользователю помощь. Пример
дружественной программы ниже.
/* ввод данных с клавиатуры и запись их на диск */
domains
file = datafile
kstr, fstr = string
predicates
write_message1
check_for_ready
give_instruction
process_input_output
process_file
write_message2
readin (kstr, fstr)
create_a_file
goal
create_a_file
clauses
create_a_file:- write_message1,
process_file, write_message2, nl, nl,
write ("Нажмите любую клавишу”),
readchar (_), exit.
write_message1:- nl, write ("Эта программа вводит данны с клавиатуры "), nl,
write ("Вывод в файл”), nl.
process_file:- check_for_ready, give_instruction,
process_input_output.
check_for_ready:- write ("Нажмитеклавишу”),
write ("Программа готова к вводу данных”), nl, readdevice (keyboard),